私はファイルセットに対してテキスト処理をしています。つまり、そのファイルに対して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
-not
find
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
ヌル文字を使用してファイル名を区切ります。