从find和sed重命名中排除目录

noo*_*lag 2 linux bash replace sed find

我使用这个命令要经过的所有文件,目录和子目录更改任何提及的oldurl.comnewurl.org:

find . -type f -name '*.php' -exec sed -i 's|oldurl.com|newurl.org|g' {} +
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是,我需要被改动排除三个子目录:/cache,/archive/etc在这些路径与上面的命令改变网址,打破其他脚本.

没有太多运气找到答案......它甚至可能吗?

非常感谢任何建议/帮助.

mar*_*erh 6

使用查找-not选项:

find . -type f -name '*.php' -not \( -path './etc/*' -o -path './cache/*' -o -path './archive/*'  \) -exec sed -i 's|oldurl.com|newurl.org|g' {} \;
Run Code Online (Sandbox Code Playgroud)