由于网站文件太多,用sed命令的时候出现了很多错误
网站是四年多的了,文章也每天都坚持发布,用的网站程序是织梦的,生成的HTML文件保守估计有10万多个,现在接到通知,要把所有的HTML文件的公司地址更改为最新的地址,于是想到了linux下强大的sed
命令,于是远程连接服务器就开干。
用了下面的命令开始替换网站目录下的所有文件,原以为顺利搞定,没想到马上就报错,真是出师不利啊!
[fqit@linSev wwwroot]$ sudo sed -i "s/aaa/bbb/g" `find ./ -name *.html`
find: paths must precede expression: index.html
经过网上搜索知道了答案,目录下的多文件搜索查找需要给shell参数加上单引号,这样才能正常执行多文件查找操作,具体答案可以看StackOverflow上的find: paths must precede expression;只要把上面的命令改成下面的形式就能正常替换了:
[fqit@linSev wwwroot]$ sudo sed -i "s/aaa/bbb/g" `find ./ -name '*.html'`
但是这个问题是解决了,马上又来新的问题了,查找是没有问题了,但是替换又出现问题,错误如下:
[fqit@linSev wwwroot]$ sudo sed -i "s/aaa/bbb/g" `find ./ -name '*.html'`
sudo: unable to execute /bin/sed: Argument list too long
从错误可以看出,是因为要替换的文件太多了,无法正常的进行替换工作,现在我想知道的如果我要以这样的命令替换的话,能替换的文件最多的临界点是多少?如果能测试到这个临界点,我觉得分批还是能替换的,希望知道测试过这个临界点的朋友麻烦告知一下,当然网上还有更好的解决办法,比如说最简单的解决办法可以将上面的命令改成下面就能解决了:
[fqit@linSev wwwroot]$ sudo find ./ -name '*.html' -exec sed -i "s/aaa/bbb/g" {} \;
除以上替换命令,你还可以使用另一种替换方式,那就是xargs命令,上面的命令替换成:
[fqit@linSev wwwroot]$ sudo sed -i "s/aaa/bbb/g" | xargs grep aaa -rnl ./
当然,除了直接运行命令行去替换,还能通过编写shell脚本去替换,那就更简单了,循环直接替换即可。
目前共有 3 条回复