请给我任何 shell bash 脚本来帮助我完成以下任务:
如果最后添加的目录的 4 个文件大小彼此相同,则退出,否则继续
例子 :
ls -l $dir_path | awk '{print $5}' | tail -4
如果 4 个打印值彼此相同,则退出,否则继续。
答案1
zsh -c 'zmodload zsh/stat
[[ $(zstat -N +size -- *(.om[1,4])) =~ $'\''(.*)\n\\1\n\\1\n\\1'\'' ]]' && exit
如果当前目录中4个最新的非隐藏常规文件大小相同,则会退出。
在 GNU 系统上,您还可以执行以下操作:
find . -maxdepth 1 ! -name '.*' -type f -printf '%T@ %s\n' |
sort -rn |
awk 'NR == 1 {v = $0}; v != $0 {exit}; NR == 4 {exit 1}' || exit
POSIXly:
ls -tnq -- "$dir_path" |
awk '!/^-/ {next}
n++ == 0 {v = $5}
v != $5 {exit}
n == 4 {exit 1}' || exit
如果像您自己的方法一样,您想要输出中的最后 4 个(无论它们是常规文件、符号链接还是套接字...)而不是 4 个最新的ls
(按字母顺序排序的列表),您可以做(仍然是 POSIXly):
ls -rnq -- "$dir_path" |
awk 'NR == 1 {next}
NR == 2 {v = $5}
v != $5 {exit}
NR > 4 {exit 1}' || exit
答案2
用于ls -c
排序依据时间,并uniq
查看它们是否相同。
ls -crntq | tail -4 | awk '{print $5}' | uniq -c | grep -q "^\s*4\s" && exit