将文件中的链接替换为目录

时间:2013-09-11 10:14:42

标签: perl replace

我想替换目录和子目录

上的文件中的链接

我正在使用perl命令行:

perl -e "s/\/home\/mydir\/www/\/home\/mydir2/g;" -pi.save $(find home/dir2/dev -type f)

但是我有一个错误:arg list太长了

怎么了?

如何用linux命令行替换文件中的链接?

2 个答案:

答案 0 :(得分:3)

似乎您的find命令会找到这么多文件,以便达到可以传递给进程的最大参数数量。您可以通过键入以下内容在系统中找到此限制:

getconf ARG_MAX

Read more


解决方案:使用-execdir

find选项
find home/dir2/dev -type f -execdir \
perl -e "s/\/home\/mydir\/www/\/home\/mydir2/g;" {} \;

这将为每个文件调用perl命令,而不是将所有文件名作为参数传递给perl。此外,它可以防止您在文件名中出现空格问题和一些潜在的安全问题(与-exec相反)

答案 1 :(得分:1)

看起来你已经为你的问题找到了一个很好的解决方案。

我想建议对你的Perl做一点改进。替换运算符(s/.../.../)将接受替代分隔符,以使代码更清晰。

所以你在哪里:

s/\/home\/mydir\/www/\/home\/mydir2/g

您可以将其重写为:

s|/home/mydir/www|/home/mydir2|g

哪个看起来更清楚?