我有一堆文件(同名,比如 abc.txt)散布在网络文件系统中。
我需要递归搜索每个文件,一旦找到每个文件,就进行内容搜索并替换它们。
经过一番研究,我发现我可以使用 find 命令找到文件(使用 -r 进行递归,对吗?)。就像是:
find . -r -type f abc.txt
并使用 sed 对每一个进行查找和替换:
sed -ie 's/search/replace/g' abc.txt
但我不确定如何将两者粘合在一起,以便找到所有出现的 abc.txt,然后对每一个进行搜索/替换。
我的目录树非常大,所以我知道递归搜索所有目录需要很长时间,但这比手动尝试查找每个文件要好。
我在带有 Bash 的 OSX 10.6 上。
谢谢大家!
更新:我认为下面发布的答案可能适用于其他操作系统(也许是 linux),但对于 OSX,我不得不稍微调整一下。
find . -name abc.text -exec sed -i '' 's/search/replace/g' {} +
在 sed 中的 -i 之后似乎需要空引号,以表明我们不想生成备份文件。手册页内容如下:
-i 扩展名:
就地编辑文件,以指定的扩展名保存备份。如果给出零长度扩展名,则不会保存备份。