我位于根文件夹中,需要找到该文件夹最后 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' |
这些不假设文件路径可能包含哪些字符或非字符。