Backup automático e exclusão de certas pastas

1

Eu criei o script follow bash a ser usado no cron para fazer backup de determinadas pastas automaticamente, além de excluir algumas subpastas:

folders_to_backup=(
    "/first/folder/to/backup/"
    "/second/folder/to/backup/"
)

backup_temp="/home/myuser/temp_backup_folder/"
mkdir $backup_temp
for i in "${folders_to_backup[@]}"
do
    cp -r $i $backup_temp
done

find $backup_temp | tar -czf "/home/myuser/backup.tgz" -T - -- exclude=*/venv --exclude=*/__pycache__
rm -r $backup_temp

Então, basicamente, o que estou fazendo é criar uma pasta temporária e, em seguida, copiar todas as coisas relevantes que eu quero fazer para essa pasta. Então eu tar essa pasta (enquanto excluindo certas subpastas) e salve-o em outro lugar. Então eu apago a pasta temporária.

A cópia de tudo para a pasta temporária funciona corretamente. No entanto, quando eu abro o arquivo tar, ele contém várias duplicatas de cada arquivo. Por exemplo, se eu fiz um backup de um arquivo chamado test.txt , esse arquivo será localizado no diretório temporário. No entanto, ao procurar no arquivo tar, haverá várias cópias de test.txt

Não consigo descobrir o que está acontecendo entre a pasta temporária e o tar. Estou aberto a sugestões para corrigir o problema acima ou sugestões sobre como fazer isso sem usar uma pasta temporária.

    
por darkpool 04.06.2016 / 12:52

2 respostas

2

Você precisa usar tar --no-recursion ou find ... ! -type d , porque cada vez que seu find está listando um diretório, o tar recursivamente copia tudo.

Além disso, você não poderia simplesmente evitar a cópia e fazer um -C dir . para cada diretório em sua matriz, por exemplo:

args=()
for f in "${folders_to_backup[@]}"
do    args+=("-C" "$f" ".")
done
tar -czf "/home/myuser/backup.tgz" "${args[@]}" --exclude ...
    
por 04.06.2016 / 13:18
0

Acho que tudo o que você precisa é de rsync

Por exemplo:

$ rsync -auxnv -T /temp/dir --exclude={"/dir/1","/dir/2",...} \
  /source/file user@host:/dest/dir/

Há também uma opção para compactação durante a transferência, -z

Por favor, leia man rsync

Verifique se isso também .

    
por 04.06.2016 / 23:45