如何编写 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使用空字符来分隔文件名。

相关内容