找到所有用户子目录中的所有.htaccess文件,并为其添加一个字符串

时间:2013-03-25 00:50:48

标签: bash .htaccess shell findandmodify

我想在“public_html”(但不是public_html)下面的整个字符串可能的子目录中找到所有用户帐户的所有“.htaccess”文件(如果文件存在,如果没有创建)。基本上可以在任何远程类似于可能包含图像的目录中找到它。

这是我的代码:

#!/bin/bash 
cat /etc/domainusers | cut -f1 -d: | while read USER; do
find /home/$USER/public_html/ -type d -regex ".*\/public_html\/.*\(img.\|pic.\|pics.\|image.\|images.\|Image.\|Images.\|Pic.\|Pics.\|Img.\|picture.\|pictures.\|Picture.\|Pictures.\|upload.\|Upload.\|download.\|Download.\|Gallery\|gallery\|Galleries\|galleries\|import.\|Import.\|Thumbnail.\|Thumbnails.\|thumbnail.\|thumbnails.\|wpThumbnail.\|thumb.\|Thumb.\)" | while read FOLDER; 
    do
        if [[ -e "$FOLDER/.htaccess" && ! $(grep "AddHandler cgi-script" "$FOLDER/.htaccess") ]]; then
            echo -e "AddHandler cgi-script .php .pl .py .jsp .asp .htm .html .shtml .sh .cgi .php5 .php4 .php3 .phps .txt .bat .cmd .rb .txt .msi .exe .xml .xhtml\nOptions -ExecCGI -Indexes" >> "$FOLDER/.htaccess"
            chattr +ia "$FOLDER/.htaccess"
        fi
    done
done

虽然上面的脚本运行正常,但它实际上并没有按照我的意愿去做。我检查了用户的图像目录,但没有找到任何“.htaccess”文件。 :/

理想情况下,我还想在屏幕上看到执行过程中发生了什么,如果可能的话,还要将结果输出到文本文件中。

1 个答案:

答案 0 :(得分:1)

出于调试目的,您可以使用命令set -xv(您可以将其放在#!/bin/bash下)。

对于不写任何.htaccess的脚本,我认为罪魁祸首在你的if语句中:

你的条件说明如果.htaccess存在且不包含“AddHandler cgi-script”那么你可以做一些事情,但是如果文件.htaccess不存在则if条件退出而不做任何事情

试试这个:

if [[ ! -e "$FOLDER/.htaccess" || ! $(grep "AddHandler cgi-script" "$FOLDER/.htaccess") ]]

因此,如果该文件存在,它将添加“AddHandler cgi-script”,如果该文件不存在,它将使用请求的字符串创建它