最大サイズのファイルを除くプレフィックスを持つすべてのファイルを削除する

最大サイズのファイルを除くプレフィックスを持つすべてのファイルを削除する

現在のディレクトリから特定のプレフィックスを持つすべてのファイルを削除する最善の方法は何ですか?

(最も大きいものが一意でない場合は、ランダムに1つを維持し、残りは削除します。)

たとえば、現在のディレクトリには次のファイルが含まれています。

-rw-rw----  1 user user 3468 Jan 01 00:00 filea
-rw-rw----  1 user user 3434 Jan 01 00:00 pre_0
-rw-rw-r--  1 user user 9769 Jan 01 00:00 fileb
-rw-rw-r--  1 user user 1950 Jan 01 00:00 filec
-rw-rw-r--  1 user user 8654 Jan 01 00:00 pre_1
-rw-rw----  1 user user 6508 Jan 01 00:00 pre_2

コマンドまたはスクリプトを実行してプレフィックスが "pre_"の最大ファイルを除くすべてのファイルを削除した後、現在のディレクトリを次のようにリストする必要があります。

-rw-rw----  1 user user 3468 Jan 01 00:00 filea
-rw-rw-r--  1 user user 9769 Jan 01 00:00 fileb
-rw-rw-r--  1 user user 1950 Jan 01 00:00 filec
-rw-rw-r--  1 user user 8654 Jan 01 00:00 pre_1

ベストアンサー1

複数のユーティリティを組み合わせて使用​​できます。

stat -c '%s %n' pre_* | sort -k1,1rn | tail -n +2 | cut -d' ' -f2 | xargs rm

GNUシステムであり、珍しいファイル名がないとします。

  • statpre_*スペースで区切られたすべてのファイルのファイルサイズと名前を取得します。

  • sortファイルサイズに基づいてファイルを並べ替える(最大のファイルから並べ替え)

  • tail -n +2最大のファイルを除く残りのファイルのインポート

  • cut -d' ' -f2ファイル名のみを取得して削除するにはrm()xargs rm

おすすめ記事