0

我想替换目录和子目录上的文件中的链接

我正在使用 perl 命令行:

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

但我有一个错误:arg list too long

怎么了 ?

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

4

2 回答 2

3

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

getconf ARG_MAX

阅读更多


解决方案:使用-execdir选项find

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

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

于 2013-09-11T10:17:05.613 回答
1

看起来您已经为您的问题提供了一个很好的解决方案。

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

所以你在哪里:

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

您可以将其重写为:

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

你觉得哪个更清楚?

于 2013-09-11T11:01:20.507 回答