1. 概要
Linuxシステムのシステム管理者として、私たちは物事を片付けるのにかなりの時間を費やすことができます。 これには、多くの場合、ディレクトリツリーで再帰的にファイルを検索して削除することが含まれます。
このチュートリアルでは、ファイルの「拡張子」またはファイル名のパターンに基づいてファイルのバッチを削除するいくつかの方法を見ていきます。 また、バッチ削除の一般的な落とし穴を回避する方法についても説明します。
2. 警告
LinuxでCLIを使用してファイルを削除すると、ファイルは完全に削除されます。 したがって、1つのコマンドで複数のファイルを削除する場合は、いくつかのベストプラクティスに従う必要があります。
まず、正しいファイルを削除していることを確認する必要があります。 これを支援するには:
- pwd を使用して現在のディレクトリを確認したり、ファイルへのパスが正しいことを確認したりする場合があります
- ls を使用してファイルを一覧表示および確認することにより、削除したいものだけを削除していることを確認する必要があります
- 削除部分を有効にせずにコマンドを使用して、削除されるファイルをプレビューする場合があります
次に、ディレクトリから削除する前に、ディレクトリのバックアップを作成することを検討する必要があります。 Linux tar コマンドは、ディレクトリのバックアップを作成するのに役立ちます。
3. ファイルの検証とバックアップ
この例では、Emacsテキストエディタでいくつかのテキストファイルを編集しているとしましょう。 Emacsは、編集された各ファイルのバックアップを作成し、ファイル名の末尾に「〜」(チルダ)文字を付けます。 いくつかのテキストファイルを編集した後、「 .txt〜」で終わるファイルをすべて削除します。
すべての削除例では、Linux find コマンドを使用して、削除するすべてのファイルを識別します。 find は、Linuxでファイルを検索するための最も一般的で効果的なツールです。
3.1. 場所を確認する
まず、 pwd を使用して、適切な場所にいることを確認しましょう。
$ pwd
/tmp/d
3.2. ファイルの検索と検証
次に、削除するファイルを検索する find コマンドを作成し、削除する代わりにそれを使用してリストすることにより、削除するファイルを再確認しましょう。
$ find . -type f -name '*.txt~' -print
./john.txt~
./middle/ieou.txt~
./b.txt~
./left/u.txt~
./left/up/asdf.txt~
./left/t.txt~
./left/down/kjhl.txt~
./a.txt~
ここでは、オプション-type f を使用してファイルを選択し、 -name’* .txt〜’ を使用してファイル名を一致させ、-printを使用してファイル名を端末にエコーします。
3.3. バックアップファイル
次に、tarでディレクトリのバックアップを作成しましょう。 これは必須の手順ではありませんが、削除する正しいファイルが100 % s確実でない限り、バックアップを作成する必要があります。
$ tar -cf backup.tar .
tarがバックアップしているファイルのリストを表示するには、-vオプションを追加します。
$ tar -cvf backup.tar .
4. findでファイルを削除-削除
ファイルを削除する最も簡単な方法は、findにファイルを削除するように指示することです。 -nameオプションとfindを使用して、glob式を指定できます。 次の例では、glob式を使用して、特定の拡張子を持つファイルを検索しています。 のマニュアルページからわかるように、グロブはファイル拡張子だけでなく、それ以上のものを見つけるのに役立ちます。
$ find . -type f -name '*.txt~' -print -delete
./john.txt~
./middle/ieou.txt~
./b.txt~
./left/u.txt~
./left/up/asdf.txt~
./left/t.txt~
./left/down/kjhl.txt~
./a.txt~
find、でファイルを削除するには、findコマンドの最後に-deleteを追加するだけです。
または、削除中にファイルを印刷したくない場合は、次のようにします。
$ find . -type f -name '.txt*~' -delete
5. find -execでファイルを削除する
ファイルを削除するには、 rm をいくつかの追加オプションとともに使用するか、別のコマンド( trash など)を使用する必要があるとします。
$ find . -type f -name '*.txt~' -exec rm -f {} \;
または:
$ find . -type f -name '*.txt~' -exec trash {} \;
-execでfindを使用すると、任意のコマンドとオプションを使用してファイルを削除できます。 また、一連のファイルに対して他の一括操作を実行することもできます。
6. findおよびxargsを使用してファイルを削除します
最後に、ディストリビューションが-deleteオプションをサポートしないバージョンのfindコマンドを提供していることに気付くかもしれません。 その場合、findとxargsを使用できます。
$ find . -name "*.txt~" -print0 | xargs -0 rm
xargs を使用する場合、ファイル名のスペースに問題がないように、nullターミネータを使用することが重要です。
7. 結論
この記事では、findと他のいくつかのコマンドを使用してファイルを再帰的に削除する3つの方法を見ました。 また、削除しようとしているものを確認することの重要性と、複数のファイルを削除する前に迅速なバックアップを取ることの価値についても検討しました。