空でない小さなフォルダを見つけるにはどうすればいいですか?

空でない小さなフォルダを見つけるにはどうすればいいですか?

ほぼ空になっているすべての音楽フォルダを見つけて(後で削除して)みたいと思います(Banshee は音楽ファイルのみを削除し、そこにある他のファイルは削除しません)。

私は以下を試しました:

find -type d -size -500k \;

しかし、より大きなファイルを含むフォルダーも表示されます。

find -type d -size -500k -exec du {} \;

正しいサイズが表示されます。

N より小さいフォルダーのみを表示するように検索コマンドを変更するにはどうすればよいでしょうか?

答え1

私が使用するコマンドの1つは、これを別のスクリプトに直接パイプする必要がない限り、

du . | ソート -rn

これにより、最小のフォルダーがサイズとともに印刷リストの一番下に表示されます。それより大きいフォルダーを除外するには、もう少し作業が必要です。

答え2

N バイト未満のフォルダーを削除するだけの場合は、次の 1 行で済みます。

du | awk '$1 <= 500 { print "rm -rf \"" substr($0, length($1)+2) "\""}' | sh

これは何をするのでしょうか? 続いて:

  • duディレクトリのサイズとパスを出力します
  • $1 <= 500最初の列が500未満であるかどうかをテストする条件です(500バイトより小さい場合)
  • printawkプリントでrm -rf "/path/to/small/dir"
  • | shそれをshにパイプして実行できるようにする

sh にパイプする代わりに xargs を使用して実行することもできますが、私はこの方法に慣れています。

関連情報