75

0バイトのファイルが多数含まれるディレクトリがあります。ls コマンドを使用してもファイルが表示されません。これらのファイルを削除するために小さなスクリプトを使用していますが、これらのファイルが削除されない場合もあります。スクリプトは次のとおりです。

i=100
while [ $i -le 999 ];do
    rm -f file${i}*;
    let i++;
done

これをより迅速に行う他の方法はありますか?

4

10 に答える 10

139

findと組み合わせて使用​​しxargsます。

find . -name 'file*' -size 0 -print0 | xargs -0 rm

rmファイルごとに開始することは避けます。

于 2010-07-01T11:49:42.247 に答える
92

GNU find(コメントを参照) では、 xargs を使用する必要はありません。

find -name 'file*' -size 0 -delete
于 2010-07-01T12:52:42.767 に答える
6

次のコマンドを使用できます。

探す 。-maxdepth 1 -size 0c -exec rm {} \;

また、サブディレクトリ内の 0 バイト ファイルも削除する場合は-maxdepth 1、前のコマンドを省略して実行します。

于 2010-07-01T11:58:10.073 に答える
4

現在のディレクトリにある file... という名前のすべてのファイルを削除します。

find . -name file* -maxdepth 1 -exec rm {} \;

rmファイルごとに開始されるため、これにはまだ時間がかかります。

于 2010-07-01T11:46:53.113 に答える
2

ファイルを削除するオプション -delete を使用することもできます。

from man find, -delete ファイルを削除します。削除が成功した場合は true。

于 2010-07-01T16:32:30.410 に答える
1

ここに例を示します。自分で試してみると、これが理にかなっています。

bash-2.05b$ touch empty1 empty2 empty3
bash-2.05b$ cat > fileWithData1
Data Here
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty1
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty2
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty3
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1
bash-2.05b$ find . -size 0 -exec rm {} \;
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1

find (type man find) の man ページを見ると、このコマンドの強力なオプションの配列が表示されます。

于 2010-07-01T11:54:57.897 に答える
0

「...これらのファイルを削除しないこともあります」と、これは定期的に行うことだと思います。その場合、この Perl スクリプトは、現在のディレクトリにあるゼロバイトの通常のファイルをすべて削除します。システム コール (unlink) を使用して rm を完全に回避し、非常に高速です。

#!/usr/bin/env perl
use warnings;
use strict;

my @files = glob "* .*";
for (@files) {
    next unless -e and -f;
    unlink if -z;
}
于 2010-07-01T12:58:10.847 に答える
0

レベルを上げると、ファイルが存在する理由を理解する価値があります。それらを削除することで症状を治療しているだけです。一部のプログラムがリソースをロックするためにそれらを使用している場合はどうなりますか? もしそうなら、それらを削除すると破損につながる可能性があります.

lsof は、空のファイルを処理しているプロセスを特定する方法の 1 つです。

于 2010-07-01T13:22:05.490 に答える