すべてのサブフォルダーで特定のサイズより小さいすべてのファイルを削除するにはどうすればよいですか?


88

私は、いくつかの大きなマルチページtifファイルと一緒に大きなpdfファイルにマージされた小さなtifファイル(160kb未満)を含む多くのサブフォルダーを持つフォルダーを持っています。

大きなファイル(tifまたはpdf)を削除せずに、ディレクトリ構造を保持せずに、すべての小さなtifファイルを削除したい。Linuxでコマンドラインを使用してどうすればよいですか?

回答:


155
find . -name "*.tif" -type 'f' -size -160k -delete

-delete最初にコマンドを実行せずにコマンドを実行して、正しいファイルが見つかったことを確認します。

-前に注意してください160k。ちょうど160k160キロバイトを意味します。-160k160キロバイト未満を意味します。+160k160キロバイトを超えることを意味します。

これ-type 'f'により、コマンドはファイルに対してのみ動作し、ディレクトリをスキップします。これにより、パターンに一致する名前のフォルダーがパスに含まれている場合にエラーが回避されます*.tif

サイズをバイト単位(160キロバイトではなく160バイト)でフィルタリングする場合は、次のように記述する必要があります160c。書くだけなら160、160 * 512バイトとして解釈されます。これはPOSIXによる奇妙な要件です。詳細についてはこちらをご覧ください:https : //unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


ubuntuのmanページでこれが言及されているようです。「TESTS」セクションのすぐ下:数値引数は、nより大きい場合は+ n、nより小さい場合は-n、nだけを指定することができます。
jdg 14

1
ありがとう。情報がマンページのどこかにあるかもしれないということは私には起こりませんでした。
レスマナ14

このコマンドも再帰的に機能するのは素晴らしいことです。私のユースケースは、12kB未満の.txtファイルを削除することです。

sudoは必要ありませんか?
ジャンフランソワガニョン

11
バイト単位のサイズには、50bや50ではなく50cを指定します!
エベンガード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.