find用のラッパーを作成する方法は?

find用のラッパーを作成する方法は?

私はファイルセットに対してテキスト処理をしています。つまり、そのファイルに対してfindを実行し、いくつかのディレクトリを無視(およびクリーンアップ)します。

find . -name '*.php' -not \( -path ./.git -prune -o -path ./.idea -prune \) -exec sed -E -i 's/function_call/refactored_function/g' {} '+'

問題は、コマンドの最初の部分(-nameスイッチなど)(以前)とexecが変更される可能性があり、その引数が非常に厳しいということです。それでは、次のように書くことができるラッパーをどのように書くべきですか?-iname-type-notfind

otherfind . -name '*.php' -exec sed -E -i 's/function_call/refactored_function/g' {} '+'

それは正しいですか-not \( -path ./.git -prune -o -path ./.idea -prune \)

ベストアンサー1

find気にしないファイルを無視したりパッケージ化したりする方法を覚えておくのではなく、以下を使用してくださいgit grep

git grep -z -l function_call -- \*.php |
xargs -0 sed -E -i 's/function_call/refactored_function/g'

function_call.phpその後、無視されたファイル(定義どおり.gitignore)とディレクトリを無視し、拡張子を持つすべてのファイルを見つけて処理のために.git渡しますxargs-zオプションは-0ヌル文字を使用してファイル名を区切ります。

おすすめ記事