我正在对一组文件进行文本处理,这意味着对它们运行 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
使用空字符来分隔文件名。