【问题标题】:Comment out lines in multiple .htaccess files in multiple directories注释掉多个目录中多个 .htaccess 文件中的行
【发布时间】:2017-12-05 11:48:46
【问题描述】:

我需要注释掉服务器上许多不同网站的 .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 文件?

我一直在尝试使用各种查找搜索,但到目前为止都没有运气。

【问题讨论】:

    标签: bash


    【解决方案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/^/#/' {} \;
    

    【讨论】:

    • 抱歉,现在刚刚有机会运行它,是的,它运行得完美而快速,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多