如何找到最近 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' |

这些不假设文件路径可能包含哪些字符或非字符。

相关内容