有个php网站,生成的静态网页非常多,尝试用后台自带的工具去改变备案那些信息,发现无果,解决不了,于是想着自己直接写命令去替换,用了sed。。跑了一晚上,提示-bash: /bin/sed: Argument list too long,有什么办法解决吗。。目录深,文件很多,只需要改*.html
有个php网站,生成的静态网页非常多,尝试用后台自带的工具去改变备案那些信息,发现无果,解决不了,于是想着自己直接写命令去替换,用了sed。。跑了一晚上,提示-bash: /bin/sed: Argument list too long,有什么办法解决吗。。目录深,文件很多,只需要改*.html
结合find 和sed可以实现,下面写一个:递归查找目录下所有的html文件,并把文件中的“1234”字符串替换成"5678":
find ./ -name "*.html" -exec grep "1234" {} \; -exec sed -i 's/1234/5678/g' {} \;
1 回答2.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.3k 阅读
2 回答1.1k 阅读✓ 已解决
3 回答1.7k 阅读
1 回答1.1k 阅读✓ 已解决
本人在不久之前刚好处理过非常类似的问题,而且文件数量比你要处理的还要多,大概530多万个。对于此类问题,要在机器性能和时间效率上做平衡,如果是线下机器或者对时间要求更迫切,则必然得并发运行。以下是我在处理该问题时的一种方案:
这脚本首先获得需要处理文件的数组,然后每10000个文件在后台进行处理,并且是并发。然后wait等待所有的进程结束。
对于题主的问题,50000多个文件,这么处理应该是可以的,机器性能(主要是IO性能)还可以的话,通过这种方式,应该5分钟左右就处理完了。
如果需要控制机器的负载不能太高,则可以参考这篇文章,https://segmentfault.com/a/11...,改进该脚本控制并发进程的数量。
以上。