/bin/bash 复制代码

/bin/bash 复制代码

/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”并准备好进行下一个循环。

相关内容