サイズが0の場合、Linuxで特定のファイルを削除するにはどうすればよいですか。追加のスクリプトなしでcrontabでこれを実行したいと思います。
l filename.file | grep 5th-tab | not eq 0 | rm
このようなもの?
これにより、サイズがゼロのディレクトリ(およびそれ以下)内のすべてのファイルが削除されます。
find /tmp -size 0 -print0 |xargs -0 rm --
特定のファイルだけが必要な場合;
if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi
find を使用したいと思うでしょう:
find . -size 0 -delete
現在のディレクトリとサブディレクトリにある空のファイルを検索して削除するには:
find . -type f -empty -delete
-type f
が必要なのは、ディレクトリもサイズ0としてマークされているためです。
ドット.
(現在のディレクトリ)は、開始検索ディレクトリです。 GNUが見つかった場合(Mac OS以外)、この場合は省略できます。
find -type f -empty -delete
検索するファイルが指定されていない場合、現在のディレクトリ(。)が使用されます。
これを行うには、コマンドfind
を使用できます。 -type f
とファイルを照合し、-size 0
を使用して空のファイルと照合できます。その後、-delete
で一致を削除できます。
find . -type f -size 0 -delete
これはプレーンBSDで機能するため、すべてのフレーバーと普遍的に互換性があります。以下:pwd
(.
)
find . -size 0 | xargs rm
Linuxでは、stat(1)コマンドはfind(1)が不要な場合に便利です。
(( $(stat -c %s "$filename") )) || rm "$filename"
ここでのstatコマンドを使用すると、ファイルサイズを取得できます。これが-c %s
です(他の形式についてはmanページを参照してください)。 statプログラムを実行し、その出力をキャプチャしています。それが$( )
です。この出力は数値で表示され、それは外側の(( ))
です。サイズにゼロが指定された場合、それはFALSEであるため、ORの2番目の部分が実行されます。ゼロ以外(空でないファイル)はTRUEになるため、rmは実行されません。
非再帰的削除の場合(duおよびawkを使用):
rm `du * | awk '$1 == "0" {print $2}'`
find . -type f -empty -exec rm -f {} \;