そのため、他のディレクトリで満たされたディレクトリを取得しましたが、サイズのないファイルを削除できるかどうか疑問に思っていました。通常、これらのファイルは0バイトです。これらすべてのサブディレクトリをマージしたいので、完全に合法なファイルを無重量の0バイトファイルに置き換えることができます。ゼロバイトファイルを削除する方法はありますか?
そのため、他のディレクトリで満たされたディレクトリを取得しましたが、サイズのないファイルを削除できるかどうか疑問に思っていました。通常、これらのファイルは0バイトです。これらすべてのサブディレクトリをマージしたいので、完全に合法なファイルを無重量の0バイトファイルに置き換えることができます。ゼロバイトファイルを削除する方法はありますか?
回答:
Findコマンドを使用して、サイズでファイルを検索し、ファイル名を標準出力に出力します。
find . -type f -size 0b -print
代わり-print
に-delete
ファイルを削除するのではなく、画面上でそれらを印刷します。
find . -type f -size 0b -delete
-empty
代わりに使用できます-size 0b
。
シェルで直接行うこともできます。これは、空の隠しファイル(名前がで始まるもの)を削除したくない場合に便利です.
。これを行うこともできますがfind
、代わりにシェル自体を使用することもできます。
shopt -s globstar
for file in **/*; do [ ! -s "$file" ] && [ -f "$file" ] && rm "$file"; done
shopt -s globstar
:**
1つ以上のサブディレクトリに一致させるbashのglobstarオプションをオンにします。**/*
現在のディレクトリとそのすべてのサブディレクトリ内のすべてのファイルとディレクトリに一致します。for file in **/*; do ...; done
:見つかったすべてのファイルとディレクトリを反復処理します。[ ! -s "$file" ]
:[ -s "$file" ]
ファイルが存在し、空でない場合はtrueです。したがって、[ ! -s "$file" ]
(!
テストの逆)ファイルが存在しないか、空の場合はtrueです。[ -f "$file" ]
:ファイルが通常のファイルである場合はtrue。ディレクトリやデバイスファイル、シンボリックリンクなどではありません。rm "$file"
:ファイルを削除します。&&
これが唯一の空の、通常のファイルを削除しますので、以前のものが成功した場合、次のコマンドをのみ実行されていることを確認してください。