Bash

我怎樣才能找到最近修改的文件?

  • February 16, 2021

在一個目錄中,我有許多文件,我需要對最近修改的帶有.txt後綴的文件做一些事情。

理想情況下,我想做

myutility "$newest"

最後,$newest最近修改的文件的路徑名在哪裡。

如果這還可以被概括,那就太好了,這樣我就可以在目錄層次結構中獲得最近修改的帶有.txt後綴的文件,如果我可以獲得五個最近修改的文件,這樣我就可以使用更好了

myutility "${newest[@]}"

.txt在整個目錄層次結構中的五個最近修改的文件上執行我的實用程序。

使用bashor的解決方案ksh93是最好的。

儘管您使用和 glob 限定符標記了問題bashksh, :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 ''.

引用自:https://unix.stackexchange.com/questions/456957