在目录及其子目录中搜索和替换单词

Search and replace a word in directory and its subdirectories

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

我使用了这行代码:

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

但它只改变当前目录下的文件中的单词,不影响子目录。

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

试试看:

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

那应该运行递归

如果您的文件名包含 space:

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

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

更简单的解决方案是使用 find 命令来查找所有文件,然后 运行 对它们使用命令。

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

(我转义了 {} 和 ; 以防万一,但您可能不需要这个)