Bash 在所有用户子目录中查找所有.htaccess文件并向其中添加字符串

Bash 在所有用户子目录中查找所有.htaccess文件并向其中添加字符串,bash,.htaccess,shell,findandmodify,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_h

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


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

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

对于未编写任何.htaccess的脚本,我认为罪魁祸首在于您的if语句:

您的条件声明,如果.htaccess存在并且不包含“AddHandler cgi脚本”,则您可以执行某些操作,但是如果文件.htaccess不存在,则条件将不执行任何操作而退出

试试这个:

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

因此,如果该文件存在,它将添加“AddHandler cgi脚本”,如果该文件不存在,它将使用请求的字符串创建该文件。出于调试目的,您可以使用命令
set-xv
(您可以将其放在
!/bin/bash
下)

对于未编写任何.htaccess的脚本,我认为罪魁祸首在于您的if语句:

您的条件声明,如果.htaccess存在并且不包含“AddHandler cgi脚本”,则您可以执行某些操作,但是如果文件.htaccess不存在,则条件将不执行任何操作而退出

试试这个:

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

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

它工作了!!非常感谢@Diego:)我用修改过的代码运行了它,检查了几个图像目录,文件就在那里!现在,要了解如何将结果写入文本文件以跟踪所做的操作。不客气,如果您经常使用bash,请将精力集中在输出重定向上。高级bash脚本指南(此处链接)是您的朋友:-)它成功了!!非常感谢@Diego:)我用修改过的代码运行了它,检查了几个图像目录,文件就在那里!现在,要了解如何将结果写入文本文件以跟踪所做的操作。如果您经常使用bash,欢迎您将精力集中在输出重定向上。高级bash脚本指南(此处链接)是您的朋友:-)