1. 概要

このチュートリアルでは、Linuxでサイズがゼロのファイルを削除する方法を見ていきます。

2. 0バイトのファイルを探す

まず、 find コマンドを使用して、ホームディレクトリ内のすべての0バイトファイルを検索しましょう。

$ find /home/baeldung -size 0
/home/baeldung/log
/home/baeldung/test/logging.log
/home/baeldung/job.txt

find は、指定したパスから始まるすべてのファイル、ディレクトリ、およびサブディレクトリを検索します。 -size オプションは、検出されたファイルを、 n 単位未満、それ以上、または正確に n 単位のスペースを使用するファイルに制限し、切り上げます。 単位を指定しない場合、サイズのデフォルトの単位は使用されるブロック数になります。 したがって、正確に0バイトのサイズのファイルが必要な場合は、‘c’サフィックスを使用する必要があります。これはバイト用です。

$ find /home/baeldung -size 0c

3. findを使用する

0バイトのファイルの長いリストがある場合は、 find コマンドでそれらを検索し、-deleteオプションを使用してすべてのファイルを削除できます

$ find /home/baeldung -size 0c -delete

-deleteオプションを使用する前に、検索結果を確認することをお勧めします

$ find /home/baeldung -size 0c

find はすべてのディレクトリとサブディレクトリ(この場合は test ディレクトリ)に移動し、 / home /baeldungから始まるすべてのファイルを削除することに注意してください。 -maxdepth オプションを設定することで、この機能を制限できます。

3.1. の使用-maxdepth

-maxdepthオプションは、 / home /baeldungディレクトリから始まる深さで制限のあるファイルを検索するようにfindコマンドに指示します。

$ find /home/baeldung -maxdepth 1 -size 0c -delete

削除されなかったファイルを確認してみましょう。

$ find /home/baeldung -size 0c 
/home/baeldung/test/logging.log

-maxdepth を設定したため、今回はfindtestディレクトリに移動しません。 したがって、logging.logファイルはまだ存在します。

3.2. の使用-名前

現在のディレクトリのみを検索し、特定の名前のファイルをフィルタリングする場合は、-nameオプションを使用できます。

$ find /home/baeldung -maxdepth 1 -size 0c -name "log*" -delete

このコマンドは、名前が「log」で始まるファイルのみを削除します。

3.3. -execを使用する

古いバージョンのfindでは、-deleteオプションが使用できない場合があります。 この場合、-execオプションを使用できます。 ここで、 -exec を使用すると、 rm コマンドを実行して、見つかったファイルを削除できます。

$ find /home/baeldung -maxdepth 1 -size 0c -exec rm '{}' \;

-execの後の文字列'{}’は、見つかったファイル名に置き換えられます。 中括弧は、シェルスクリプトの句読点として解釈されないように、一重引用符で囲んでいることに注意してください。

また、コマンドとそれに必要なすべての引数の最後にを使用する必要があることに注意してください。 コマンドの終了を指定します。 また、’\’を使用して、シェルによってセミコロンが展開されないように保護します。 セミコロン(’;’)を一重引用符で囲むと、同じ保護が提供されます。

3.4. コマンドの順序

ファイルをフィルタリングして削除するコマンドの順序は重要です。 したがって、ファイルサイズを制限する前に-deleteまたは-execオプションを使用すると、findは他のすべてのオプションを無視します。 したがって、ディレクトリ内のすべてのファイルが削除されます。

$ find /home/baeldung -delete -maxdepth 1 -size 0c 

4. 結論

この記事では、サイズがゼロのファイルを削除する方法について説明しました。

find コマンドを使用して、 -size オプションでファイルサイズをフィルタリングしてから、-deleteオプションですべてのファイルを削除できます。 -delete オプションが使用できない場合は、 -exec を使用して、すべての0バイトファイルに対してrmコマンドを実行できます。