/bin/bash 复制代码
sitedir="$HOME/domains"
logs="$HOME/site_backups/log"
tbackups="$HOME/site_backups/today"
ybackups="$HOME/site_backups/yesterday"
echo "`date`" > $logs/backups.log
for i in `ls`; do
cd $sitedir/$i
tar -czf $tbackups/$i".tar.gz" /public_html >> $logs/backups.log
done
exit 0
我想备份域名 ($home/domains/site.com/public_html) 内的每个 public_html 文件夹,并在 $HOME/site_backups/today 中使用该域名创建一个 tar。但是,当我运行 bash 脚本时,出现了错误:
test.sh: line 12: cd: /home/user/domains/log: No such file or directory
test.sh: line 12: cd: /home/user/domains/test.sh: No such file or directory
test.sh: line 12: cd: /home/user/domains/today: No such file or directory
test.sh: line 12: cd: /home/user/domains/yesterday: No such file or directory
为什么它 cd 到 /home/user/domains/.. ?我已经指定了$sitedir/$i
这意味着/home/user/domains/domain.name
答案1
ls
在当前目录中运行。从结果来看,它一定是/home/user/domains/
。如果要处理 $sitedir 中的目录,请先切换到该目录:
cd "$sitedir"
for i in */ ; do
( cd "$i" && tar -czf $tbackups/${i%%/}".tar.gz" public_html >> $logs/backups.log ; )
done
*/
通过在 的位置使用ls
,shell 将返回一个目录列表,这似乎是您想要的,而不仅仅是任何文件。
最后,我将“$1”的处理放在括号中(一个子 shell),这样,当处理结束时,脚本就会返回到“$sitedir”并准备好进行下一个循环。