1. 概要

このチュートリアルでは、Linuxで空のファイルとディレクトリを削除する方法を学習します。

空のファイルは、サイズがゼロバイトのファイルです。 空のディレクトリとは、ファイルやディレクトリが含まれていないディレクトリです。 空のファイルはスペースを消費しないと言っても過言ではありませんが、ベストプラクティスとして、ファイルシステムを時々クリーンアップする必要があります。

このチュートリアルで説明するすべてのコマンドはLinux固有であり、Windowsでは機能しません。

2. ディレクトリ内の空のファイルを削除する

find コマンドを使用して、特定のディレクトリ内のすべての空のファイルを削除できます。

$ find . -type f -empty -print -delete

空のファイルを削除するには、2つの手順を実行する必要があります。 まず、指定されたディレクトリ内のすべての空のファイルを検索してから、それらのファイルをすべて削除します。

コマンドのこの特定の部分、 探す 。 -type f -empty -print は、指定されたディレクトリ内のすべての空のファイルを再帰的に検索します。 次に、 -delete オプションを追加して、これらのファイルをすべて削除します。

例を挙げてこれを理解してみましょう。

空のファイルと空でないファイルの両方とサブディレクトリを含むディレクトリについて考えてみます。 ここで、 data-file のプレフィックスが付いたファイルは空でないファイルであり、emptyのプレフィックスが付いたファイルは空のファイルです。

|-- data-file1
|-- data-file2
|-- empty-file1
|-- empty-file2
|-- empty-file3
|-- empty file 4
|-- mydir1
|   |-- data-file3
|   `-- empty-file5
|-- mydir2
|   |-- data-file4
|   `-- empty-file6
`-- mydir3
`-- mydir4
    `-- mydir5

次に、このディレクトリ内で上記のコマンドを実行します。 すべての空のファイルを再帰的に削除します。 これは、ディレクトリmydir1およびmydir2内のempty-file5およびempty-file6もそれぞれ削除されることを意味します。

$ find . -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir1/empty-file5
./mydir2/empty-file6
./empty file 4

出力を注意深く観察しましょう。 このコマンドにより、名前にスペースが含まれているファイル(この例では「 emptyfile4 」)が削除されていることがわかります。

また、このコマンドは空のファイルのみを削除し、mydir3mydir5。のような空のディレクトリは削除しません。

3. 空のファイルの非再帰的削除

これまで、ディレクトリ内の空のファイルを再帰的に削除するシナリオについて説明してきました。 サブディレクトリ内に存在するファイルではなく、現在のディレクトリに存在する空のファイルを削除する必要がある場合はどうなりますか?

find コマンドには、 -maxdepth オプションがあり、findコマンドがファイルを検索する深さのディレクトリレベルの最大数を定義します。

-maxdepth 1 を使用すると、findコマンドは現在のディレクトリ内のファイルのみを検索します。

$ find . -maxdepth 1 -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./empty file 4

4. 空のディレクトリをすべて削除する

-typedfindコマンドを使用して、ディレクトリを検索できます。

$ find . -type d -empty -print -delete

これにより、現在のディレクトリ内に存在するすべての空のディレクトリが再帰的に削除されます

上記と同じファイルシステム内でこのコマンドを実行してみましょう。

$ find . -type d -empty -print -delete
./mydir3
./mydir4/mydir5
./mydir4

繰り返しますが、出力に注意してください。 mydir4 ディレクトリも削除されます。これは、 mydir5 ディレクトリを削除すると、 mydir4 が空のディレクトリになるためです(ディレクトリ構造をもう一度注意深く観察してください)。

5. 空のディレクトリの非再帰的な削除

-maxdepth 1 を使用すると、 find コマンドを制限して、現在のディレクトリ内の空のディレクトリのみを検索できます。

$ find . -maxdepth 1 -type d -empty -print -delete
./mydir3

6. 空のファイルとディレクトリを一緒に削除する

今度は、これまでに学んだことをすべて組み合わせるときです。 1つのコマンドを使用して、現在のディレクトリ内に存在するすべての空のファイルとディレクトリを削除しましょう。

論理OR演算子-oをfindコマンドとともに使用して、空のファイルとディレクトリを検索します

$ find . -type d -empty -print -delete -o -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir1/empty-file5
./mydir2/empty-file6
./mydir3
./mydir4/mydir5
./mydir4

-o オプションは、コマンドをファイルパスから2つの部分に分割します。 最初の部分-typed-empty -print -delete はすべての空のディレクトリを削除し、2番目の部分 -type f -empty -print-deleteは削除しますすべての空のファイル。

ここでも、-maxdepth 1を使用して、空のファイルとディレクトリを非再帰的に削除できます

$ find . -maxdepth 1 -type d -empty -print -delete -o -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir3

7. 結論

このチュートリアルでは、空のファイル、空のディレクトリ、およびLinuxでそれらを削除する方法について学習しました。 再帰的および非再帰的の2種類の削除アプローチを検討しました。

ファイルまたはディレクトリを削除すると、復元できなくなります。 したがって、削除する前にすべてのファイル/ディレクトリを確認することを強くお勧めします。 上記のすべてのコマンドで、 -delete オプションを削除して、削除されるすべてのファイルを確認できます。

また、良い習慣として、空のファイルとディレクトリを削除するcronジョブを作成できます。 このようにして、マシンに空のファイル/ディレクトリが蓄積されることはありません。