如果目录的最后 4 个文件大小彼此相同,则退出 otheriwse continue

如果目录的最后 4 个文件大小彼此相同,则退出 otheriwse continue

请给我任何 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

相关内容