如何找到最近 10 個修改過的文件

如何找到最近 10 個修改過的文件

我位於根資料夾中,需要找到該資料夾最後 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 1findafter .

若要排除隱藏文件,請刪除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' |

這些不假設檔案路徑可能包含哪些字元或非字元。

相關內容