ssh loop files e transferência local

0

Estou logado via ssh para server1, enquanto no server1 eu quero pegar arquivos localizados em um repositório git no server2 e salvá-los no server1 para fazer algo com eles (um script para salvar em um banco de dados)

O repositório git é uma estrutura bastante profunda. Não posso simplesmente clonar o repositório porque estou sem espaço. Então, é claro que eu quero percorrer todos os arquivos no Server2 e, com cada um, movê-lo para server1, fazer minha função para salvar no banco de dados e, em seguida, excluir o arquivo.

A parte em que estou tendo problemas é recursivamente em loop nos arquivos para fazer o download por ssh.

em edição: estou me comunicando entre dois servidores redhat.

    
por user254694 06.11.2012 / 15:13

1 resposta

0

Isso não é muito elegante, mas esperamos que a ideia seja transmitida:

ssh localhost -p4444 \
 "find ~/tmp/  -iname \*png -exec \
    sh -c 'echo mkdir -p moo-diles/\'dirname {}\'\;\
           rsync -e \"ssh -p 4444\" localhost:{} moo-files/{}\;\
           rm -i {}' \; "

(...)

mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track14.png moo-files//home/jaroslav/tmp/transcode/track14.png; rm -i /home/jaroslav/tmp/transcode/track14.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/closeup.png moo-files//home/jaroslav/tmp/transcode/closeup.png; rm -i /home/jaroslav/tmp/transcode/closeup.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track15.png moo-files//home/jaroslav/tmp/transcode/track15.png; rm -i /home/jaroslav/tmp/transcode/track15.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track10.png moo-files//home/jaroslav/tmp/transcode/track10.png; rm -i /home/jaroslav/tmp/transcode/track10.png

(...)

O que está sendo feito aqui pode ser chamado de "metaprogramação" porque para cada arquivo encontrado, simplesmente repetimos mais comandos para executar. Esses comandos devem ser executados posteriormente para processar cada arquivo. Você será aconselhável colocar os comandos que vêm em sh -c '<here>' em um script no servidor. Dessa forma, você evitará perder sua sanidade mental ao tentar escapar das coisas corretamente e ler um comando com três linhas de comprimento.

    
por 06.11.2012 / 19:21