Baixando arquivos pelo ssh baseado em uma lista de nomes de arquivos

3

Então, aqui está o que eu já fiz:

Eu tenho um arquivo chamado abc.txt que contém uma lista de arquivos. Eu estou usando o abc.txt para mover esses arquivos para uma pasta, tar essa pasta e, finalmente, eu baixar o tar para o meu PC local do meu servidor, que está executando o GNU / Linux.

Aqui estão os passos no formulário de lista:

  1. abc.txt
  2. abc.txt (arquivos listados) - > pasta
  3. Pasta - > folder.tar
  4. folder.tar - > PC local.

Se o arquivo abc.txt contiver 2 arquivos, por exemplo:

example1.css
example2.css

Eu preciso baixar esses arquivos de abc.txt separadamente e diretamente para o PC local.

Como o ftp ou o sftp precisam do nome do arquivo para baixá-lo, como posso ler isso em abc.txt?

    
por Mano 30.12.2013 / 12:29

3 respostas

5

Se o arquivo abc.txt contiver a lista de nomes de arquivos relativos a /path/to/base :

ssh user@server tar c -T /path/to/abc.txt -C /path/to/base | (cd /tmp; tar xv)

Isso cria um tarball on-the-fly, sem salvá-lo em lugar algum, canalizá-lo para o shell local, extrair, copiar efetivamente os arquivos listados.

DICAS EXTRA

Se o arquivo abc.txt contiver a lista de caminhos absolutos:

ssh user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)

Se o arquivo abc.txt estiver no seu sistema local, não no remoto:

ssh user@server tar c -T- < /path/to/abc.txt | (cd /tmp; tar xv)

Para usar a compactação gzip (usando o nível padrão 6):

ssh -C user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)

Para usar o nível de compactação gzip 9:

ssh user@server 'tar c -T /path/to/abc.txt | gzip -9' | (cd /tmp; tar zxv)
    
por 30.12.2013 / 13:12
1

Aqui está um script simples que funciona com arquivos que contêm espaços no nome do arquivo:

SAVEIFS=$IFS; IFS=$(echo -en "\n\b") ; for elt in 'cat abc.txt' ; do scp $elt <YOUR_SFTP_CONNECTION> ; done ; IFS=$SAVEIFS
    
por 30.12.2013 / 12:49
0

Acho que o ponto central do seu problema é como extrair os arquivos corretos da sua lista para os dois caminhos lógicos subseqüentes.

egrep 'example1.css|example2.css' abc.txt

fornecerá todas as linhas que correspondem às exceções e

egrep -v 'example1.css|example2.css' abc.txt

fornecerá todas as linhas que não correspondem às exceções

    
por 30.12.2013 / 12:45

Tags