bash script para tar pastas de vários domínios

0

! / 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

Eu quero fazer backup de todas as pastas public_html dentro de um nome de domínio ($ home / domains / site.com / public_html) e fazer um tar em $ HOME / site_backups / today com o nome do domínio. No entanto, quando eu corro meu script bash eu estou recebendo erros:

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

Por que cd é para / home / user / domains / ..? Eu especifiquei $sitedir/$i , o que significa /home/user/domains/domain.name

    
por Alexander Kim 26.12.2013 / 21:16

1 resposta

3

ls é executado em qualquer diretório atual. De seus resultados, deve ter sido /home/user/domains/ . Se você quiser trabalhar nos diretórios em $ sitedir, mude para esse diretório primeiro:

cd "$sitedir"
for i in */ ; do
    ( cd "$i" && tar -czf $tbackups/${i%%/}".tar.gz" public_html >> $logs/backups.log ; )
done

Usando */ em lugares de ls , o shell retorna uma lista de diretórios, o que parece ser o que você quer, em vez de apenas qualquer arquivo.

Por último, eu coloquei o processamento de "$ 1" entre parênteses (um subshell) para que, quando o processamento terminar, o script esteja de volta em "$ sitedir" e pronto para o próximo loop.

    
por 26.12.2013 / 21:39