在多个目录中注释多个.htaccess文件中的行

时间:2017-12-05 11:48:47

标签: bash

我需要在.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文件?

我一直试图使用各种搜索搜索,但到目前为止一直没有运气。

1 个答案:

答案 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/^/#/' {} \;