!/ Бен / Баш

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

Я хочу сделать резервную копию каждой папки public_html внутри доменного имени ($ home/domains/site.com/public_html) и сделать tar в $ HOME/site_backups/today с именем домена. Однако, когда я запускаю свой 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

Почему это компакт-диски в /home /user /domains /..? Я указал $sitedir/$i что означает /home/user/domains/domain.name

1 ответ1

3

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 , оболочка возвращает список каталогов, который, как вам кажется, нужен, а не какой-либо файл.

Наконец, я поместил обработку «$ 1» в круглые скобки (подоболочка), чтобы после завершения обработки сценарий вернулся в «$ sitedir» и был готов к следующему циклу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .