我想替换目录和子目录上的文件中的链接
我正在使用 perl 命令行:
perl -e "s/\/home\/mydir\/www/\/home\/mydir2/g;" -pi.save $(find home/dir2/dev -type f)
但我有一个错误:arg list too long
怎么了 ?
如何用 linux 命令行替换文件中的链接?
似乎您的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
)
看起来您已经为您的问题提供了一个很好的解决方案。
我想建议对您的 Perl 进行一些小的改进。替换运算符 ( s/.../.../
) 将接受替代分隔符以使代码更清晰。
所以你在哪里:
s/\/home\/mydir\/www/\/home\/mydir2/g
您可以将其重写为:
s|/home/mydir/www|/home/mydir2|g
你觉得哪个更清楚?