多数の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
を省略して実行します。
find . -maxdepth 1 -type f -size 0 -delete
これにより、サブディレクトリに入ることなく、現在のディレクトリでサイズ0のファイルが検索され、削除されます。
ファイルを削除せずにリストするには:
find . -maxdepth 1 -type f -size 0
現在のディレクトリにあるfile ...という名前のファイルをすべて削除します。
find . -name file* -maxdepth 1 -exec rm {} \;
すべてのファイルに対してrm
を開始するため、これにはまだ時間がかかります。
フォルダー内のすべての0バイトファイルを検索して削除する場合:
find /path/to/folder -size 0 -delete
ファイルを削除するオプション-deleteを使用することもできます。
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のマニュアルページを見る場合(タイプman find
)、このコマンドの強力なオプションの配列が表示されます。
レベルを上げると、ファイルが存在する理由を把握する価値があります。症状を削除するだけで治療することになります。何らかのプログラムがリソースをロックするためにそれらを使用している場合はどうなりますか?その場合、それらを削除すると破損する可能性があります。
lsofは、空のファイルを処理するプロセスを特定する方法の1つです。
"...これらのファイルを削除しないこともあります"は、これがあなたが定期的に行うことだと思うようにします。その場合、このPerlスクリプトは、現在のディレクトリにあるゼロバイトの通常ファイルをすべて削除します。システムコール(リンク解除)を使用してrmを完全に回避し、非常に高速です。
#!/usr/bin/env Perl
use warnings;
use strict;
my @files = glob "* .*";
for (@files) {
next unless -e and -f;
unlink if -z;
}