我需要在.htaccess文件中注释掉服务器上许多不同网站的特定行。
.htaccess文件位于以下目录中:
/home/siteA/public_html/.htaccess
/home/siteB/public_html/.htaccess
依旧......
这些是我想从所有.htaccess文件中注释掉的代码块:
<IfModule mod_suphp.c>
suPHP_ConfigPath /home/bcrunch
<Files php.ini>
order allow,deny
deny from all
</Files>
</IfModule>
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
我尝试了以下内容:
root@server [/home]# shopt -s globstar
root@server [/home]# sed -i.bak -r '/<IfModule mod_suphp\.c>/,/<\/IfModule>/ s/^/#/; /<Files
"\.user\.ini">/,/<\/Files>/ s/^/#/' **/.htaccess
我在我用其他测试子目录测试的测试目录上测试了它,并测试了.htaccess文件和上面的内容并且工作正常但是一旦我在/ home运行这个,我有大约30多个站点它挂起来很长一段时间,只是开始耗尽越来越多的内存。问题是它的递归搜索和其他目录中的其他.htaccess文件我不感兴趣它只是陷入困境。
那么如何更改上面的代码并告诉它只对这样的所有文件进行更改?
/home/siteA/public_html/.htaccess
并忽略其他.htacccess文件?
我一直试图使用各种搜索搜索,但到目前为止一直没有运气。
答案 0 :(得分:1)
您可以使用此sed
:
sed '/<IfModule mod_suphp\.c>/,/<\/IfModule>/s/^/#/; /<Files "\.user\.ini">/,/<\/Files>/s/^/#/' file
结合find
:
find /home/site*/public_html -name '.htaccess' -exec \
sed -i.bak '/<IfModule mod_suphp\.c>/,/<\/IfModule>/s/^/#/; /<Files "\.user\.ini">/,/<\/Files>/s/^/#/' {} \;