rsync --files-from equivalente

2

Estou tentando fazer backup de algumas coisas de um servidor que executa uma versão antiga do rsync - por várias razões, não posso simplesmente atualizar o software.

Normalmente, eu usaria --files-from e daria uma lista de arquivos e diretórios para fazer o backup, mas essa versão do rsync não tem essa opção. Existe uma maneira, com outros switches, de fazer um rsync antigo se comportar da mesma maneira?

Eu tentei uma combinação de --include-from = --exclude = * mas isso parece ser insuficientemente recursivo (por exemplo, / etc / * apenas faz backup de coisas diretamente abaixo de / etc).

    
por Jon Topper 21.07.2009 / 11:38

3 respostas

3

Eu suspeito que xargs seja seu amigo nesse caso.

Completamente não testado:

 # cat file | xargs -IREPLACE rsync -v REPLACE server:/path

O xargs pegará os dados do stdin e os adicionará à linha de comando um parâmetro por linha de entrada até preencher o comprimento da linha de comando e, em seguida, executar um comando separado até que todas as linhas de entrada tenham sido usadas. Isso significa que o rsync pode funcionar mais de uma vez. Isso não deveria ser um problema neste caso, mas poderia estar com outros comandos.

Normalmente o xargs apenas cola os argumentos no final da linha, mas com o rsync você desejaria ter o destino por último, então usamos a opção -I para substituir uma string pelos argumentos. (Este é o bit que não foi testado). Também estou um pouco inseguro sobre o que o rsync fará com os caminhos, então, por favor, teste isso com cuidado antes de usá-lo com raiva.

Se você tiver um problema com o xargs, você pode usar algo como:

for i in $(cat file); do rsync -v $i server:/path; done

Se o seu arquivo for maior, você provavelmente desejará usar um loop while / read. Isso será muito mais lento, pois fará um único arquivo por vez.

    
por 21.07.2009 / 12:28
0

Se as suas inclusões / exclusões não forem recursivas, talvez você não tenha especificado -r ? Se você está acostumado a usar --files-from , talvez tenha saído do hábito.

Além disso, dar o comando exato que você está usando pode ajudar. include-from / exclude-from definitivamente me ajuda bem.

    
por 21.07.2009 / 11:57
0

Bobo, nenhuma solução sem sentido que precisei usar antes em alguns servidores quando o rsync sozinho não quer ser legal. Use o tar para capturar apenas os arquivos desejados:

cat INCLUDES
/home/user/index.htm
/home/user/robots.txt

tar cf INCLUDES.tar INCLUDES
for file in 'cat INCLUDES'; do tar -r --file=INCLUDES.tar $file; done

rsync -avzP INCLUDES.tar [email protected]:./remote_path

--- Now on remote server

mkdir INCLUDES
tar xf INCLUDES.tar -C ./INCLUDES
rsync -avzP INCLUDES/home/user/ /home/user/
    
por 01.08.2012 / 23:50

Tags