GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンドラインで特定の拡張子を持つファイルを削除する方法

特定の拡張子を持つ複数のファイルを削除したい場合があります。このチュートリアルは、まさにそれを行うのに役立ちます。

rmコマンドを使用して、次の方法でファイルとフォルダーを削除します。

rm [option] filename

ここで正確なファイル名を知る必要があるように見えるかもしれませんが、そうではありません。

ファイル拡張子に基づいて複数のファイルを削除するいくつかの方法を紹介します。

方法1:rmコマンドを使用して拡張子でファイルを削除する

私の例では、拡張子が.gifで終わるgifファイルがたくさんあります。

それらを削除するには、次のようにrmコマンドを使用できます。

rm *.gif

そのように盲目的にファイルを削除するのは危険です。 lsコマンドを使用して、どのファイルが削除されるかを最初に確認することをお勧めします。

ls *.gif

拡張子が.gifのファイルを削除する方法は次のとおりです。

$ ls
1.gif  2.gif  3.gif  4.gif  a.jpg  b.png  c.webp

$ ls *.gif
1.gif  2.gif  3.gif  4.gif


$ rm -v *.gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'

$ ls
a.jpg  b.png  c.webp

これは、.gifだけでなく、任意のファイル拡張子に対して実行できます。複数の拡張機能を組み合わせることもできます。

$ ls
f1.txt  f2.txt  f3.txt  f4.txt  not-txt-file.pdf random.txt


$ rm -v *.txt *.pdf
removed 'f1.txt'
removed 'f2.txt'
removed 'f3.txt'
removed 'f4.txt'
removed 'not-txt-file.pdf'

$ ls
random.txt
💡各ファイルを削除する前に確認を求めるrmコマンドでインタラクティブな-iオプションを使用できます。ただし、削除するファイルが多数ある場合、これは便利ではない可能性があります。

どのように機能するのか疑問に思いますか?ワイルドカード!

一言で言えば、ワイルドカードは、特定のパターンに一致させるために使用する特殊文字です。以下は、頻繁に使用されるいくつかのワイルドカードです。

Wilcard 使用
* 1つ以上のオカレンスに一致
単一のオカレンスに一致
[] (角かっこ) 一致する範囲を指定します
^ 試合から除外

ここでは*ワイルドカードを使用しました。これは、任意の文字の1つ以上の出現に一致できることを意味します。

*.gifと言うとき 、.gifにつながる文字の任意の組み合わせを意味します 。つまり、拡張子が.gifのすべてのファイルが表示されます。 。

1つ以上のワイルドカードに加えて、各ワイルドカードを使用できます。しかし、今はそれらの詳細には立ち入らないようにしましょう。

*と拡張子の間のドットは重要です!

多くの人が*.gifを混乱させるという間違いを犯します *gifを使用 。これは正しくないです。 *と拡張子名の間のドット(。)は重要です。

次のファイルを使用してシナリオを作成し、正規表現*gifを使用するとどうなるかを確認します。 *.gifの代わりに :

$ ls

1.gif  2.gif  3.gif  4.gif  definately-not-a-gif  jpg-not-gif  not-a-gif


$ rm -v *gif

removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
removed 'definately-not-a-gif'
removed 'jpg-not-gif'
removed 'not-a-gif'

また、文字列gifのファイルも削除されました その中で、それはファイルの拡張子ではありませんでしたが、ファイル名の最後に前のドットなしでgifが付いていました。

ワイルドカードまたは正規表現を含むファイルを削除するときは、できるだけ正確であることを確認してください。

方法2:findコマンドを使用して特定の拡張子を持つファイルを再帰的に削除する

rmコマンドは、現在のディレクトリ内のファイルのみを削除します。再帰オプションを使用しても、サブディレクトリからファイルは削除されません。

特定の拡張子を持つファイルを再帰的に削除するには、findコマンドとrmコマンドを組み合わせることができます。

これは、サブディレクトリにも.gifファイルがある例です。

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

ファイルを削除するには、次のような検索コマンドを使用できます。

find . -type f -name "*.gif" -exec rm -v {} \;

コマンドを実行したときの出力は次のとおりです。

$ find . -type f -name "*.gif" -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir3/file_3.gif'
removed './dir2/file_2.gif'
removed './file_0.gif'
removed './dir4/file_4.gif

分解してみましょう。

  • 「検索」の後のピリオドは、現在のディレクトリを検索することを意味します
  • 「-name」フラグは、正規表現を使用できるファイルの名前を指定します
  • 「-exec」フラグは、findコマンドの結果に対してbashコマンドを実行するために使用されます
  • 「{}」中括弧は、一致したファイルの結果のプレースホルダーとして機能するため、「rm -v {}」は、コマンドが見つかったファイルを削除します。
  • 最後に、セミコロンはシェルによって実行されたコマンド(execの後のコマンド)を終了し、セミコロンが適切にエスケープされるように円記号'\'が使用されます。これについて心配する必要はありません。

以下のチュートリアルで、findコマンドのその他の例を学ぶことができます。

高度なボーナスのヒント:複数の拡張子を持つファイルを操作するには、findコマンドを使用します

上記のコマンドは、「rm * .gif*.txt」

のような複数の拡張子を持つファイルの検索には対応していません。

これを実現するには、-oを使用できます '論理OR演算子'を意味する引数。ただし、括弧をエスケープするにはバックスラッシュ「\」も使用する必要があります

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

$ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir1/file_a.txt'
removed './dir3/file_3.gif'
removed './dir3/file_c.txt'
removed './dir2/file_2.gif'
removed './dir2/file_b.txt'
removed './file_0.gif'
removed './file_z.txt'
removed './dir4/file_d.txt'
removed './dir4/file_4.gif'

ここでは、拡張子が「txt」のすべてのファイルと拡張子が「gif」のファイルが再帰的に削除されていることがわかります。

ファイル拡張子の種類ごとに個別にfindコマンドを使用する方が簡単で、間違いではないように感じるでしょう。

結論

この記事では、特定の拡張子を持つファイルの削除について説明しました。また、これらのファイルを再帰的に見つけて削除することも検討しました。

「大きな力には大きな責任が伴う」 、ワイルドカードと正規表現を使用する場合は、これを覚えておいてください。 1つのタイプミスや重要なファイルが、意図せずに削除される可能性があります。


Linux
  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. 特定のフォルダ内の特定の拡張子を持つすべてのファイルを削除するにはどうすればよいですか?

  3. 特定の拡張子を持つファイルを非表示にする方法は?

  1. Linuxで巨大な(100-200GB)ファイルを削除する方法

  2. Linuxでファイルの名前を変更する方法

  3. Linuxでfdコマンドを使用してファイルを検索する方法

  1. Linuxコマンドラインでlsを使用してファイルを一覧表示するためのヒント

  2. 検索コマンドを使用してLinuxでファイルを検索する方法

  3. Linuxでjar内のファイルをコマンドラインに置き換える方法は?