0バイトのファイルが多数含まれるディレクトリがあります。ls コマンドを使用してもファイルが表示されません。これらのファイルを削除するために小さなスクリプトを使用していますが、これらのファイルが削除されない場合もあります。スクリプトは次のとおりです。
i=100
while [ $i -le 999 ];do
rm -f file${i}*;
let i++;
done
これをより迅速に行う他の方法はありますか?
0バイトのファイルが多数含まれるディレクトリがあります。ls コマンドを使用してもファイルが表示されません。これらのファイルを削除するために小さなスクリプトを使用していますが、これらのファイルが削除されない場合もあります。スクリプトは次のとおりです。
i=100
while [ $i -le 999 ];do
rm -f file${i}*;
let i++;
done
これをより迅速に行う他の方法はありますか?
find
と組み合わせて使用しxargs
ます。
find . -name 'file*' -size 0 -print0 | xargs -0 rm
rm
ファイルごとに開始することは避けます。
GNU find
(コメントを参照) では、 xargs を使用する必要はありません。
find -name 'file*' -size 0 -delete
次のコマンドを使用できます。
探す 。-maxdepth 1 -size 0c -exec rm {} \;
また、サブディレクトリ内の 0 バイト ファイルも削除する場合は-maxdepth 1
、前のコマンドを省略して実行します。
現在のディレクトリにある file... という名前のすべてのファイルを削除します。
find . -name file* -maxdepth 1 -exec rm {} \;
rm
ファイルごとに開始されるため、これにはまだ時間がかかります。
ファイルを削除するオプション -delete を使用することもできます。
from man find, -delete ファイルを削除します。削除が成功した場合は true。
ここに例を示します。自分で試してみると、これが理にかなっています。
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 ページを見ると、このコマンドの強力なオプションの配列が表示されます。
「...これらのファイルを削除しないこともあります」と、これは定期的に行うことだと思います。その場合、この Perl スクリプトは、現在のディレクトリにあるゼロバイトの通常のファイルをすべて削除します。システム コール (unlink) を使用して rm を完全に回避し、非常に高速です。
#!/usr/bin/env perl
use warnings;
use strict;
my @files = glob "* .*";
for (@files) {
next unless -e and -f;
unlink if -z;
}
レベルを上げると、ファイルが存在する理由を理解する価値があります。それらを削除することで症状を治療しているだけです。一部のプログラムがリソースをロックするためにそれらを使用している場合はどうなりますか? もしそうなら、それらを削除すると破損につながる可能性があります.
lsof は、空のファイルを処理しているプロセスを特定する方法の 1 つです。