指定されたテキストを含むファイルを見つけて削除する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 を返した場合、削除は完了していません。

答え2

grep -FRl 'extract($_REQUEST)' | xargs rm -fv
  • grep- ファイルからテキストを検索します。
  • -F- 可能な正規表現を無視し、文字列をそのまま処理します。
  • -R- 再帰検索。
  • -l- ファイル名のみを印刷します。
  • xargs- 出力を次のプログラムに供給します。
  • rm- 削除する。
  • -f- 強制(「確実ですか?」と聞かないでください)。
  • -v- オプションで、削除されたファイルを削除します。

修正する:

正確なテキストを含むファイルのみを削除するには、ファイル内の文字も確認することをお勧めします。

for i in $(grep -FRl 'extract($_REQUEST)'); do [[ $(cat $i | wc -c) == "19" ]] && rm -fv $i; done
  • wc -c- ファイル内の文字数を計算します。提供された例(extract($_REQUEST))の長さは19文字(改行を含む)なので、例ではその数字を使用しました。状況に合わせて自由に変更してください。

答え3

注文する

find  . -maxdepth 1 -type f -exec grep -l  "string_to_be_searched" {} \;|awk '{print $1}'| sed "s/\.\///g"| awk '{print "rm -rvf" " " $1}'| sh

注:テスト後の効果は非常に良いです。

関連情報