Antes de rsync
existir, aqui está um truque que vale a pena conhecer. Às vezes você se encontra em um sistema sem rsync.
O truque é criar um arquivo tar dos arquivos, copiar o arquivo para o novo servidor e extrair o arquivo tar com -p
para preservar as permissões do arquivo.
"Mas espere!" você pergunta. "Esse arquivo temporário pode ser enorme! Maior que o espaço livre que eu tenho!" Não se preocupe. Você pode escrever conectar os dois tar
s por um pipe e você não precisa de um arquivo temporário, nem do espaço em disco! Para especificar stdin ou stdout, especifique o nome do arquivo -
(hífen).
Juntando tudo:
cd $SRCDIR
tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -"
Por exemplo:
cd /home/user12
tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -v f -"
O &&
é como ;
(ponto-e-vírgula), mas significa "somente execute o próximo comando se este for bem-sucedido".
Lembre-se de que você precisa fazer isso como root se quiser copiar o proprietário do arquivo: group também. Sua conta de usuário normal normalmente não pode chown
a um arquivo, portanto, nem pode tar. O comando funcionará mesmo se ssh
solicitar uma senha porque ssh
é inteligente o suficiente para não conectar o pipe até que o login seja concluído.
Nota: tar
atualizará as permissões em todos os arquivos, exceto o diretório raiz, porque não o criou. Você criou com o mkdir -p
. Você pode consertar isso se usar tar para capturar o diretório em vez de ".". Aqui está o último exemplo repetido de uma forma que atualizará as permissões em "user12":
cd /home
tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -v f -"
Veja a diferença?