我正在尝试编写一个脚本,该脚本将深入到 /home 中的每个子目录并找到其中的 public_html 文件夹。
然后它会检查 .htaccess 是否已经存在,如果确实将其写入文件,如果不存在,则将 .htaccess 文件放入 public_html
现在我有
#!/bin/bash
FILE=.htaccess
for d in */; do
cd "${D}"
cd public_hmtl
if [-e $FILE ]; then
echo "Htaccess exists for "${D}" >> /test/error.txt
else
cp /htaccess ./
fi
这显然是不对的,因为它甚至没有运行。我对 bash 没有太多经验,而且自从我需要使用它以来已经有一段时间了。
答案1
#!/bin/sh
htaccess='/path/to/.htaccess'
for dir in /home/*/public_html/; do
if [ -e "$dir/.htaccess" ]; then
print 'htaccess exists in "%s"\n' >&2
else
cp "$htaccess" "$dir"
fi
done
这将遍历public_html
每个目录中的所有目录/home
,并检查其中是否已有.htaccess
文件。如果有,则生成诊断消息,否则.htaccess
从某处复制标准。
你会运行这个
$ ./script 2>error.log
您的代码的问题是cd
.它将目录更改为目录之一public_html
(如果从内部运行/home
),但再也不会回来。