我想在“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”文件。 :/
理想情况下,我还想在屏幕上看到执行过程中发生了什么,如果可能的话,还要将结果输出到文本文件中。
答案 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”,如果该文件不存在,它将使用请求的字符串创建它