ディレクトリ内のすべてのファイルを削除したり、特定の種類のファイル(特定の拡張子で終わる)を除くすべてのファイルを削除してディレクトリをクリーンアップしたりする必要がある場合があります。
この記事では、 rm を使用して、特定のファイル拡張子またはタイプを除くディレクトリ内のファイルを削除する方法を説明します。 、検索 およびglobignore コマンド。
先に進む前に、Linuxの重要な概念の1つであるファイル名パターンマッチングを簡単に見てみましょう。これにより、目前の問題に対処できるようになります。
推奨される読み物: Linuxで複数のファイル名/拡張機能を検索するにはfindコマンドを使用します
Linuxでは、シェルパターンは、ワイルドカードと呼ばれる次の特殊文字で構成される文字列です。 またはメタ文字 :
-
*
–0個以上の文字に一致します -
?コード> –任意の1文字に一致します
-
[seq]
–seqの任意の文字に一致します -
[!seq]
–seqにないすべての文字に一致します
ここで検討する方法は3つあり、その中には次のものがあります。
拡張パターンマッチング演算子を使用してファイルを削除する
さまざまな拡張パターンマッチング演算子を以下に示します。ここで、 pattern-list |
を使用して区切られた1つ以上のファイル名を含むリストです キャラクター:
-
*(pattern-list)
–指定されたパターンの0回以上の出現に一致します -
?(pattern-list)
–指定されたパターンの0回または1回の出現に一致します - +(パターンリスト) –指定されたパターンの1つ以上のオカレンスに一致します
-
@(pattern-list)
–指定されたパターンの1つに一致します -
!(pattern-list)
–指定されたパターンの1つを除くすべてに一致します
それらを使用するには、 extglobを有効にします 次のシェルオプション:
# shopt -s extglob
1。 ファイル名以外のディレクトリ内のすべてのファイルを削除するには、次のコマンドを入力します。
$ rm -v !("filename")
2。 filename1を除くすべてのファイルを削除するには およびfilename2 :
$ rm -v !("filename1"|"filename2")
3。 次の例は、すべての .zip
以外のすべてのファイルを削除する方法を示しています。 インタラクティブにファイル:
$ rm -i !(*.zip)
4。 次に、すべての .zip
以外のディレクトリ内のすべてのファイルを削除できます。 および.odt
何が行われているのかを表示しながら、次のようにファイルします。
$ rm -v !(*.zip|*.odt)
必要なコマンドをすべて取得したら、 extglobをオフにします。 そのようなシェルオプション:
$ shopt -u extglob
Linuxfindコマンドを使用してファイルを削除
この方法では、findコマンドを適切なオプションのみで使用するか、 xargsと組み合わせて使用できます。 以下の形式のようにパイプラインを使用してコマンドを実行します。
$ find /directory/ -type f -not -name 'PATTERN' -delete $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
5。 次のコマンドは、 .gz
以外のすべてのファイルを削除します 現在のディレクトリ内のファイル:
$ find . -type f -not -name '*.gz'-delete
6。 パイプラインを使用する およびxargs 、上記のケースを次のように変更できます:
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7。 もう1つの例を見てみましょう。以下のコマンドは、 .gz
を除くすべてのファイルを消去します。 、 .odt
、および .jpg
現在のディレクトリ内のファイル:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
BashGLOBIGNORE変数を使用してファイルを削除する
ただし、この最後のアプローチはbashでのみ機能します。ここでは、 GLOBIGNORE 変数は、パス名の展開で無視されるコロンで区切られたパターンリスト(ファイル名)を格納します。
推奨される読み物: LinuxでのGrepコマンドに関する12の実用的な例
この方法を使用するには、クリーンアップするディレクトリに移動してから、 GLOBIGNOREを設定します。 次のように変数:
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
この場合、 .odt
以外のすべてのファイル 、 .iso
、および .txt
現在のディレクトリから削除されたファイル。
次に、コマンドを実行してディレクトリをクリーンアップします。
$ rm -v *
その後、 GLOBIGNOREをオフにします 変数:
$ unset GLOBIGNORE
それで全部です!同じ目的で他のコマンドラインテクニックを念頭に置いている場合は、以下のフィードバックセクションから私たちと共有することを忘れないでください。