ディレクトリから同じサイズのファイルを削除する方法は?

ディレクトリから同じサイズのファイルを削除する方法は?

画像があるため、同じサイズの一部のファイルを削除する必要があります。ただし、これらのイメージをすべて削除するのではなく、キューの次のイメージのみを削除します(アルファベット順)。

1.png    # 23,5 Kb
2.png    # 24,6 Kb
4.png    # 24,6 Kb > remove
8.png    # 24,6 Kb > remove
16.png   # 23,5 Kb

ベストアンサー1

Linuxを使用している場合、またはGNUツールにアクセスできる場合は、次のことができます。

last=-1; find . -type f -name '*.png' -printf '%f\0' | sort -nz | 
    while read -d '' i; do 
        s=$(stat -c '%s' "$i"); 
        [[ $s = $last ]] && rm "$i"; 
    last=$s; 
done

説明する

  • last=-1:変数$lastをに設定します-1
  • find . -type f -name '*.png' -printf '%f\0':現在のディレクトリで、名前が.png次に終わるすべてのファイルを探します。ヌル文字
  • sort -gz\0:区切り入力()を数字()でソートします。これにより、ソートされたファイル名のリストが生成されます。-z-n
  • while read -d '' i; do:ファイル名のリストを読みます。 NULLで区切られたデータを正しく処理するために必要な-d ''フィールド区切り文字を設定します。\0
  • s=$(stat -c '%s' "$i");:変数は$s現在のファイル()のサイズを保持します$i
  • [[ $s = $last ]] && rm "$i";:現在のファイルのサイズが前のファイルと同じ場合は、そのファイルを削除します。
  • last=$s$last現在のファイルのサイズを設定します。次のファイルのサイズが同じ場合、前のステップでそのファイルが削除されます。

おすすめ記事