1

我想在“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”文件。:/

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

4

1 回答 1

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”,如果文件不存在,它将使用请求的字符串创建它

于 2013-03-26T14:08:43.713 回答