一度に複数のファイルのテキストを見つけて削除するLinuxコマンド

一度に複数のファイルのテキストを見つけて削除するLinuxコマンド

私のウェブサイトはウイルスに感染しています。ウイルスは私のウェブサイト上のいくつかのファイルにこの行を追加しました。私の考えは、端末の唯一のコマンドを使用してこのテキスト行を削除することです。

「file-1.php」、「file-2.php」などのファイルを含む「my-folder」フォルダがあるとします。

また、複数のファイルが感染しているとします。

複数のファイルからこのコード行を見つけて削除するコマンドはありますか?すぐに

削除するテキスト: extract($_REQUEST) && @assert(stripslashes($accept)) && 終了;

これを見つけましたが、単一のファイルでのみ機能します。

$ sed 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//' my-file.php

できますか?

ベストアンサー1

  1. 組み合わせて再帰的sedfindすることができます。このような:

    find . -type f -name "*php" -exec sed -i.bak 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//' {} \+
    

    現在のディレクトリツリーを巡回し、既存の「* php」ファイルのそれぞれにsedを適用することに注意してください。また、変更されたファイルごとに.bakバックアップファイルを作成します(後で復元できるように)。バックアップが不要な場合-i.bakに置き換えてください-i。それ以外の場合は後でfind . -name "*php.bak" -delete

  2. このステップはすべてをすぐに解決するのに役立つわけではありませんが、今後の時間を確実に節約できます。以下のスクリプトを含むディレクトリを保存しますgit(理想的には完全なCI / CDソリューションである必要がありますが、git startから始めることができます)。これにより、ファイルに適用された変更を簡単にロールバック/転送できます。

おすすめ記事