在目录及其子目录中搜索和替换单词
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;' \{\} \;
(我转义了 {} 和 ; 以防万一,但您可能不需要这个)
我需要在一个目录及其子目录的所有文件中查找并替换一个词。
我使用了这行代码:
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;' \{\} \;
(我转义了 {} 和 ; 以防万一,但您可能不需要这个)