web-dev-qa-db-ja.com

Linuxはサイズ0のファイルを削除します

サイズが0の場合、Linuxで特定のファイルを削除するにはどうすればよいですか。追加のスクリプトなしでcrontabでこれを実行したいと思います。

l filename.file | grep 5th-tab | not eq 0 | rm

このようなもの?

143
Franz Kafka

これにより、サイズがゼロのディレクトリ(およびそれ以下)内のすべてのファイルが削除されます。

find /tmp -size  0 -print0 |xargs -0 rm --

特定のファイルだけが必要な場合;

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi
191
Paul Tomblin

find を使用したいと思うでしょう:

 find . -size 0 -delete
240
James.Xu

現在のディレクトリとサブディレクトリにある空のファイルを検索して削除するには:

find . -type f -empty -delete

-type fが必要なのは、ディレクトリもサイズ0としてマークされているためです。


ドット.(現在のディレクトリ)は、開始検索ディレクトリです。 GNUが見つかった場合(Mac OS以外)、この場合は省略できます。

find -type f -empty -delete

GNU find documentation から:

検索するファイルが指定されていない場合、現在のディレクトリ(。)が使用されます。

108
Antonio

これを行うには、コマンドfindを使用できます。 -type fとファイルを照合し、-size 0を使用して空のファイルと照合できます。その後、-deleteで一致を削除できます。

find . -type f -size 0 -delete
14
PYK

これはプレーンBSDで機能するため、すべてのフレーバーと普遍的に互換性があります。以下:pwd.

find . -size 0 |  xargs rm
4
user1874594

Linuxでは、stat(1)コマンドはfind(1)が不要な場合に便利です。

(( $(stat -c %s "$filename") )) || rm "$filename"

ここでのstatコマンドを使用すると、ファイルサイズを取得できます。これが-c %sです(他の形式についてはmanページを参照してください)。 statプログラムを実行し、その出力をキャプチャしています。それが$( )です。この出力は数値で表示され、それは外側の(( ))です。サイズにゼロが指定された場合、それはFALSEであるため、ORの2番目の部分が実行されます。ゼロ以外(空でないファイル)はTRUEになるため、rmは実行されません。

3
cdarke

非再帰的削除の場合(duおよびawkを使用):

rm `du * | awk '$1 == "0" {print $2}'`
2
Harrison
find . -type f -empty -exec rm -f {} \;
1
Diệu Thu Lê