我位於根資料夾中,需要找到該資料夾最後 10 個修改過的檔案。每次我像我的講師所說的那樣輸入-mtime,我就有10天的時間。我需要最近 10 個修改過的文件,而不是最近 10 天的值。我嘗試過找到我的時間,我的時間帶有尾巴。我得到了過去 10 天內每個修改過的文件的長列表。我只需要根目錄最後 10 個修改過的檔案。
答案1
ls -t | head
只要檔案名稱不包含換行符,就應該可以工作。
ls -t
按時間排序,最新的文件在前。head
只保留前 10 行。
如果您想要更多詳細信息,可以使用ls -lt
,但這會在總大小前面添加一個額外的行,因此您需要ls -lt | head -n 11
。
如果您想包含隱藏文件,可以使用ls -At | head
. (ls -A
,或--almost-all
對於 GNU ls,包括 和 以外的隱藏檔案.
。..
)
請注意,這將為您提供任意類型的最新 10 個文件,包括目錄,而不僅僅是常規文件。
答案2
在 中zsh
,對於目前工作目錄及以下最後一次修改的 10 個常規檔案:
ls -ldt -- **/*(D.om[1,10])
在其他 shell 中,但假設您使用的是最新的 GNU 系統:
find . -type f -printf '%T@:%P\0' |
LC_ALL=C sort -zrn |
LC_ALL=C sed -z 's/^[^:]*://;10q' |
xargs -r0 ls -ltd --
如果您不想考慮子目錄中的文件,請刪除**/
inzsh
或新增-maxdepth 1
到find
after .
。
若要排除隱藏文件,請刪除D
中的 glob 限定符zsh
,或將該find
行更改為:
LC_ALL=C find . -name '.?*' -prune -o -type f -printf '%T@:%P\0' |
或者如果也排除子目錄中的檔案:
LC_ALL=C find . -maxdepth 1 ! -name '.*' -type f -printf '%T@:%P\0' |
這些不假設檔案路徑可能包含哪些字元或非字元。