web-dev-qa-db-ja.com

findおよびgrepを使用してファイルのリストを削除する

特定のWordを含む名前を持つすべてのファイルを削除したい"車"。これまでのところ、私はこれを思いついた:

find|grep car

出力をrmに渡すにはどうすればよいですか?

37
Magnus
find . -name '*car*' -exec rm -f {} \;

または、パイプラインの出力をxargsに渡します。

find | grep car | xargs rm -f

これらは非常に鈍いツールであり、削除するつもりのないファイルを削除する可能性が高いことに注意してください。また、ここでは、空白(改行を含む)や先頭のダッシュなどの文字を含むファイルを処理する努力は行われません。注意してください。

85
William Pursell

rm -frは危険なコマンドなどなので、最初に削除するものを表示するには:

find /path/to/file/ | grep car | xargs ls -lh

次に、結果が希望どおりである場合、ls -lhを削除して実際のコマンドを実行し、rm -frに置き換えます

find /path/to/file/ | grep car | xargs rm -fr
10
Tony-Caffe

私は使うのが好きです

rm -rf $(find . | grep car)

rm -rfがすべてのファイルとフォルダーのリストであるgrep carの出力から返されるものに対して論理的にfind .を実行して、要求どおりに実行します。

6
ibrokemypie

本当にfind-print0と使用し、rm--と使用したい場合:

find [dir] [options] -print0 | grep --null-data [pattern] | xargs -0 rm --

具体的な例(ファイル名にcarを含む現在のディレクトリ以下のすべてのファイルを削除する):

find . -print0 | grep --null-data car | xargs -0 rm --

なぜこれが必要なのか:

  • -print0--null-dataおよび-0は、入力/出力の処理を、空白で区切られたトークンとして解析されたものから、\0文字で区切られたトークンとして解析されたものに変更します。これにより、異常なファイル名の処理が可能になります(詳細についてはman findを参照)
  • rm --は、rmへのパラメーターとして扱うのではなく、-で始まるファイルを実際に削除するようにします。 -rfというファイルがあり、find . -print0 | grep --null-data r | xargs -0 rmというファイルがある場合、ファイル-rfは削除されない可能性がありますが、他のファイルのrmの動作は変更されます。
3
Qw3ry

これにより、一致するパターン(* .xml)を持つファイルが検索され、一致する文字列(exclude = "1")の内容が検索され、一致するファイルが削除されます。

find . -type f -name "*.xml" -exec grep exclude=\"1\" {} \; -exec rm {} \;
2
Neal Garrett

いつ find | grep car | xargs rm -f結果を取得:

/path/to/car  
/path/to/car copy  

空白を含む一部のファイルは削除されません。

だから私の答えは:

find | grep car | while read -r line ; do 
  rm -rf "${line}"
done

そのため、空白を含むファイルは削除できます。

1
amazingthere

ちょっとしたネクロマンシーですが、find、grep、xargsも使用できます

find . -type f | grep -e "pattern1" -e "pattern2" | xargs rm -rf

^ Findは、ファイル、mindepth、maxdepth、グロブなど、ニーズに合わせて機能させるために注意が必要です。

1
mcdoomington

Lsとgrepを使用してファイルを検索し、rm -rfを使用してファイルを削除できます。

rm -rf $(ls | grep car)

ただし、ディレクトリやファイルが削除される可能性があり、grepで指定した文字パターンの名前が付いている場合は、このコマンドを使用することはお勧めできません。

0
nsssayom
find start_dir -iname \*car\* -exec rm -v {} \;
0
X Tian