如何查看上次创建/修改的文件的最后 5 行?

如何查看上次创建/修改的文件的最后 5 行?

每天我都必须在特定时间进行备份和更新状态以支持团队,为此我需要检查*.aff目录中最后创建/修改的文件的最后 5 行并更新它们。

谁能告诉我如何在 Linux 中像*.aff文件一样查看上次修改的文件(特定扩展名)的最后 5 行?还创建其他文件,例如*.log,等等。

答案1

带壳zsh

tail -n 5 ./*.aff(D.om[1])

对于其他 shell,如果您不想对文件名可能包含的内容做出假设,则很难想出可靠的东西。

例如,bash如果您使用的是最新的 GNU 系统,则等效内容为:

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@:%p\0' |
  sort -rzn |
  sed -zn 's/[^:]*://p;q' |
  xargs -r0 tail -n 5

或者:

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@/%p\0' |
  sort -rzn | (IFS=/ read -rd '' mtime file && tail -n 5 "$file")

答案2

假设文件名不包含换行符并且所有*.aff文件都是常规文件:

ls -t1d -- *.aff | head -n 1

为您提供最近修改的.aff文件的名称。如果你想要最后 5 行,只需执行以下操作:

tail -n 5 -- "$(ls -t1d -- *.aff | head -n 1)"

答案3

另一种安全的方法应该适用于任何 GNU 系统和 Busybox:

tail -n5 "$(stat -c "%Y %n" ./* | 
    sort -nk1,1 | cut -d ' ' -f 2- | tail -n1)"

这适用于大多数情况,但如果你的文件名可以包含换行符,请使用它(仅限 GNU,如果你的文件以换行符结尾,仍然会中断):

tail -n5 "$(stat --printf "%Y %n\0" ./* | 
    sort -rznk1,1 | sed -zn 's/[0-9]\+ //p;q')"

相关内容