サイズが1MB未満のファイルを再帰的に削除します


回答:


21

これは次の方法で実行できますfind

find . -type f -size -1M -exec rm {} +

これはサブディレクトリに再帰的に降りて、1メガバイトより小さいすべてのファイルを無条件に削除することに注意してください。注意してください。


パスの引数がありませんfind

@Useless:それはGNU findです。:)
スベンマーナック

2
@DanielAndersson:find呼び出されたプロセスへの引数の数を、システムの制限に収まるように制限しrm *ます。これは、単一のプロセス呼び出しであることが保証されています。 必要に応じてfind、複数のインスタンスを呼び出しますrm。そして、改行文字を含む特殊文字は正しく処理されると確信しています。私が好むなかっ-exec rm超える-delete例として、後者の申し出消去、書き込み保護されたファイルへの道を-柔軟性の理由から。
スベンマーナッハ

1
@Invoker:変更が間違っていたため、元に戻しました。 -1M必要に応じて1メガバイト未満を意味します。ご使用のバージョンでは、サイズがちょうど1メガバイトのすべてのファイルが削除されますが、これはやや無意味な操作のようです。
スベンマーナック

2
1Mを超えるすべてのファイルを削除したい場合は、コマンドを使用してくださいfind . -type f -size +1M -exec rm {} +。-1Mではなく+ 1Mに注意してください。
チェスナード

10

これは仕事をする必要があります:

$ find <directory> -type f -size -1M -delete

1Mからハイフンを入れる必要はないと思います。
呼び出し元

2
@Invoker、この-記号は「1M未満」を意味するマイナス記号だと思います。実行find <directory> -type f -size +1M -deleteすると 1Mを超えるすべてのファイルが削除されます。
チェスナード

はい、あなたは私の悪いです
-Invoker

2

多様性と可能な(おそらくわずかな)パフォーマンス向上のためだけに:

find <directory> -type f -size -1M -print0  | xargs -0 rm

これはどのように高速になるはずですか?追加のxargsプロセスを開始します。
スベンマーナハ

これで、同じブロックデバイスに対して2つの CPUを競合させることができます!さらに賢明なことに、stat / readdir操作は、リンク解除操作によって同期的にブロックされません。これは、より良い、明らかにされる可能性があるかどうかは、ファイル、デバイスなどの数、サブツリーのサイズに依存

1

試してみる

見つける。-size -1M -exec rm {} \;


1
これは、GNU以外のユーザーに最適です。ありがとう!スヴェンの答え@と同じ、しかしで\;はなく、終わりに+
hamx0r

-1

このリンクhttp://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/をチェックアウトすると、まさにあなたが望むものを持っています。

for file in *;
  do
    file_size=$(du $file | awk '{print $1}');
    if [ $file_size == 0 ]; then
        echo "Deleting empty file $file with file size $file_size!";
        echo "rm -f $file";
    fi;
done

forループを使用してすべてのファイルを反復処理し、上記の例のようにduとawkを使用してファイルサイズを見つけることができます。


SOに関する回答は自己完結型である必要があります。単なるリンクを投稿しないでください。(さらに、リンクされた投稿のコードは、1Mより小さいファイルではなく空のファイルを削除します。)
スベンマーナック

@SvenMarnachでは、指定されたコード例のリンクで$ file_size <1Mを使用できません。

いいえ、シェルは理解できないため、できません1M
スベンマーナック

1Mとは、1048576が1MBをバイトに変換することを意味しました

1
さて、これが本当に機能するかどうかをテストし、コードを回答にコピーすると、これがSOの回答になる場合があります。
スベンマーナック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.