特定のテキストを含むファイルを削除するターミナルコマンドはありますか?
3つのファイルがあり、その中には「extract($ _REQUEST)」というテキストが含まれているとします。
file-1.php
:ファイルに「extract($ _REQUEST)」というテキストが含まれています。file-2.txt
:私はいません。file-3.html
:ファイルに「extract($ _REQUEST)」というテキストが含まれています。
私が探しているコマンドは、次のファイルを削除しfile-1.php
ますfile-3.html
。
修正する:このファイルは削除する必要があります。〜しない限り"extract($_REQUEST)" はファイルの唯一のテキスト行です。以下の例をご覧ください。
file-4.php
:このファイルただ"extract($_REQUEST)" テキストが含まれています。file-5.php
:ファイルに「extract($ _REQUEST)」というテキストが含まれています。そして他のテキスト行
その後、コマンドは削除file-4.php
ではなく削除されますfile-5.php
。
ベストアンサー1
find . -maxdepth 1 -type f \
-exec fgrep -q 'extract($_REQUEST)' '{}' ';' \
-not -exec fgrep -vq 'extract($_REQUEST)' '{}' ';' \
-delete
find .
現在のディレクトリの検索-maxdepth 1
サブディレクトリはありません。-type f
ファイルを探す-exec
各項目に対してこのテストを実行します。fgrep
純粋な文字列の検索-q
目に見える出力なし'extract($_REQUEST)'
この文字列について'{}'
あなたが見つけたファイルから';'
【実行終了】
-not
次のテストではありません。-exec
再実行fgrep
再度fgrep-vq
しかし、今回は一致しない行を探しています。'extract($_REQUEST)'
同様のパターンを探す'{}'
ファイルに
';'
【実行終了】
-delete
削除
これはexecもテストであるために機能し、fgrepが一致するものを見つけた場合、テストは成功し実行を削除します。 grep が false を返した場合、削除は完了していません。