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

LinuxのBashで一度に複数のファイルを削除するには?

名前が特定の形式に一致するすべてのファイルを削除する場合は、ワイルドカード (グロブ パターン) が最も簡単な解決策です。いくつかの例:

$ rm -f abc.log.*             # Remove them all
$ rm -f abc.log.2012*         # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]*  # Remove all files from the first quarter of 2012

正規表現はワイルドカードより強力です。 grep の出力をフィードできます rm -fまで .たとえば、一部のファイル名が "abc.log" で始まる場合 "ABC.log" のものもある 、 grep 大文字と小文字を区別しない一致を実行できます:

$ rm -f $(ls | grep -i '^abc\.log\.')

ファイル名のいずれかにスペースを含む変な文字が含まれている場合、これは問題を引き起こします。注意してください。

これを行うとき、 ls | grep ... を実行します 最初にコマンドを実行し、必要な出力が生成されることを確認します -- 特に rm -f を使用している場合 :

$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)

どこで !! 前のコマンドに展開されます。または、上向き矢印または Ctrl-P を入力して、前の行を編集して rm -f を追加することもできます コマンド。

これは、bash シェルを使用していることを前提としています。他の一部のシェル、特に csh と tcsh および一部の古い sh 派生シェルは、$(...) をサポートしていない可能性があります。 構文。同等のバッククォート構文を使用できます:

$ rm -f `ls | grep -i '^abc\.log\.'`

$(...) 構文は読みやすく、もしあなたが本当に野心的であれば、ネストすることができます.

最後に、削除したいファイルのサブセットを正規表現で簡単に表現できない場合、私がよく使用する方法は、ファイルを一時テキスト ファイルにリストしてから編集することです。

$ ls > list
$ vi list   # Use your favorite text editor

その後、list を編集できます 手動でファイルを作成し、削除したいファイルだけを残してから:

$ rm -f $(<list)

または

$ rm -f `cat list`

(繰り返しますが、これはファイル名に変な文字、特にスペースが含まれていないことを前提としています。)

または、 list を編集するとき ファイルに rm -f を追加できます 各行の先頭まで:

$ . ./list

または

$ source ./list

ファイルの編集は、必要に応じて引用符を追加する機会でもあります。たとえば、rm -f foo bar を変更します。 rm -f 'foo bar' まで .


Sublime で複数行選択を使用して、すべてのファイルを 1 行に結合し、各ファイル名の間にスペースを追加してから rm を追加します。 リストの先頭に。これは、削除したいファイル名にパターンがない場合に最も役立ちます。

[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10

Bash はあらゆる種類のワイルドカードと拡張をサポートしています。

あなたの正確なケースは、次のようにブレース展開によって処理されます:

$ rm -rf abc.log.2012-03-{14,27,28}

上記は 展開 3 つの引数すべてを持つ単一のコマンドであり、次のように入力するのと同じです:

$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28

rm の前に、この展開がシェルによって行われることに注意することが重要です。


ワイルドカード (*) を使用する ) を複数のファイルに一致させます。

たとえば、次のコマンドは、名前が abc.log.2012-03- で始まるすべてのファイルを削除します。 .

rm -f abc.log.2012-03-*

ls abc.log.2012-03-* を実行することをお勧めします rm を実行する前に、削除しようとしているファイルを確認できるように、ファイルを一覧表示します。 コマンド。

詳細については、ファイル名の展開に関する Bash の man ページを参照してください。


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

  2. LinuxでLogrotateを使用してログファイルを管理する方法

  3. LinuxでLog2ramを使用してRAMにログファイルを書き込む方法

  1. Linuxで複数のファイルを圧縮する方法

  2. Linux で Apache ログ ファイルをローテーションする方法

  3. Linux ですべてまたは特定のファイルを gzip する方法

  1. Linuxで重複ファイルを見つけて削除する方法

  2. Linuxで一度に複数のファイルの名前を変更する方法

  3. 3 つの方法を使用して Linux で複数のファイルの名前をまとめて変更する方法