由于网站文件太多,用sed命令的时候出现了很多错误

zhangwen 9个月前 311

网站是四年多的了,文章也每天都坚持发布,用的网站程序是织梦的,生成的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脚本去替换,那就更简单了,循环直接替换即可。

0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论

目前共有 3 条回复

xtt
xtt 9个月前

楼主测试了告诉我们就最好了,毕竟现在是你有这个需求,坐等中...!

eleeg
eleeg 9个月前

还是win Server大法好,直接用DW替换得比你快,哈哈

linbeet
linbeet 9个月前

有测试临界点的时间用其它方式都替换好了,没必要去测试吧。我更喜欢使用写脚本的形式去完成需求13.gif