我需要查找并替换目录及其子目录中所有文件中的单词。
我使用了这行代码:
perl -pi -w -e 's/foo/bar/g;' *.*
但它仅在当前目录中的文件中更改单词,并且不会影响子目录。
如何更改每个目录和子目录中的单词?
答案 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;' {}