指定されたテキストを含むファイルを見つけて削除するLinuxコマンド

指定されたテキストを含むファイルを見つけて削除するLinuxコマンド

特定のテキストを含むファイルを削除するターミナルコマンドはありますか?

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 を返した場合、削除は完了していません。

おすすめ記事