每天我都必须在特定时间进行备份和更新状态以支持团队,为此我需要检查*.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')"