Bash
我怎樣才能找到最近修改的文件?
在一個目錄中,我有許多文件,我需要對最近修改的帶有
.txt
後綴的文件做一些事情。理想情況下,我想做
myutility "$newest"
最後,
$newest
最近修改的文件的路徑名在哪裡。如果這還可以被概括,那就太好了,這樣我就可以在目錄層次結構中獲得最近修改的帶有
.txt
後綴的文件,如果我可以獲得五個最近修改的文件,這樣我就可以使用更好了myutility "${newest[@]}"
.txt
在整個目錄層次結構中的五個最近修改的文件上執行我的實用程序。使用
bash
or的解決方案ksh93
是最好的。
儘管您使用和 glob 限定符標記了問題
bash
和ksh
, :zsh
print **/*.txt(.om[1,5])
列印
.
帶副檔名的前 5 個普通文件 ( ),.txt
按修改時間升序排列 (om
)前任。
print **/*.txt(.om[1,5]) dir/file1.txt file2.txt dir/file.txt File1.txt File2.txt
您可以使用 ls 按修改時間(或創建或訪問)列出文件。
簡單地說
ls -t *.txt | head -n5
獲取最近 5 個最近的 .txt 文件
您可以使用 $() 或 xargs 將其輸入 myutility。
ls -t *.txt | head -n5 | xargs myutility
如果需要遞歸,可以使用 find。
find -type f -iname "*.txt" | xargs ls -t | head -n5 | xargs myutility
(可能的問題:你必須至少有一個 .txt 文件才能工作。你可以修復它,但它是最乾淨的解決方案)。
編輯:OP想知道如何處理帶空格的文件名。這是一種解決方案:
find -type f -iname "*.txt" | xargs ls -t | head -n5 | tr '\n' '\0' | xargs -0 myutility
如果你想解決上面提到的可能的問題,你可以先檢查文件,
find ..... | egrep '.*' || exit
或者簡單地在 ls 中包含一些無意義的文件名,然後忽略xargs ls -t ''
.