搜索并替换目录及其子目录中的单词

时间:2017-12-08 14:29:41

标签: macos perl directory macos-sierra

我需要查找并替换目录及其子目录中所有文件中的单词。

我使用了这行代码:

perl -pi -w -e 's/foo/bar/g;' *.*

但它仅在当前目录中的文件中更改单词,并且不会影响子目录。

如何更改每个目录和子目录中的单词?

2 个答案:

答案 0 :(得分:1)

您可以使用递归遍历目录结构的纯Perl解决方案,但这需要更多代码才能编写。

更简单的解决方案是使用find命令,可以告诉它查找所有文件并对它们运行命令。

find . -type f -exec perl -pi -w -e 's/foo/bar/g;' \{\} \;

(我已经逃过了{}和;以防万一你可能不需要这个)

答案 1 :(得分:0)

试试:

find -type f | xargs -r -I {} perl -pi -w -e 's/foo/bar/g;' {}

应该以递归方式运行

如果您的文件名包含空格:

find -type f -print0 | xargs -r0 -I {} perl -pi -w -e 's/foo/bar/g;' {}