findとgrepを使ってファイルを検索して削除する方法は?

findとgrepを使ってファイルを検索して削除する方法は?

特定のファイルを検索するには、次のコマンドを使用します。

find . -type f -name Client.php | xargs grep WARNING

削除コマンドが発生する前にユーザーにメッセージが表示されるように削除コマンドを追加する方法がわかりません。

答え1

xargsここでパイプを接続してクエリに再参加することはできず、find別々にコマンドを実行できます。grep

これ-exec基本的な1 つ以上のファイルに対してコマンドを実行します。コマンド自体が成功した結果で終了した場合にのみ成功し、右側のオペランドを処理し続けるため

find . -type f -name Client.php -exec grep -q WARNING {} \; -exec echo {} \;

〜する印刷する「WARNING」を含む「Client.php」という名前のすべてのファイルへのパス。秒を変更-exec ... \;して-delete削除したり、コマンドを変更して使用または処理rmしたりmvできます。


セミコロンは一度に1つのファイルのみをチェックし、成功すると次のような実際の動作を取得します。

基本式に<セミコロン>が付いている場合、ユーティリティはユーティリティ名各パス名に対して一度呼び出され、ユーティリティーが終了状態でゼロ値を返す場合、デフォルトのパスはtrueと評価する必要があります。

全体が-exec ... \;1つのブロックなので、使用する場合は、コマンドだけで-deleteなくセミコロンも削除する必要があります。-exec


上記のコマンドを実行することをお勧めします最初そして、実際に削除する前に、必要なファイルだけが含まれていることを確認してください。ただし、要求しない完全な削除コマンドは次のとおりです。

find . -type f -name Client.php -exec grep -q WARNING {} \; -delete

気をつけて進めてください!

答え2

スクリプトを書くことができます:

#!/bin/bash

FINDFILE=Client.php
if [[ $(find . -type f -name $FINDFILE | xargs grep "WARNING") ]] ; then
rm -i $FINDFILE
else
echo "File with warning not found."
fi

/usr/local/bin, chmod +x /usr/local/bin/scriptname にスクリプトを配置します。
今、いつでもどこでもできます。(.sh拡張子を使用しないことをお勧めします)

関連情報