ディレクトリ内の最後の4つのファイルのサイズが互いに等しい場合は終了し、それ以外の場合は[閉じる]

ディレクトリ内の最後の4つのファイルのサイズが互いに等しい場合は終了し、それ以外の場合は[閉じる]

次の作業に役立つシェル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

POSIX的に:

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

おすすめ記事