Usando o scp para transferir uma lista de arquivos .txt de arquivos

4

Eu tenho 1,6 milhões de arquivos no servidor A, e apenas cerca de 20k deles precisam chegar ao servidor B. O destino, servidor B, está na hospedagem compartilhada GoDaddy, então estou limitado a scp para transferir muitos arquivos de uma vez.

Eu gostaria de gerar um arquivo .txt desses 20k + arquivos de uma consulta SQL e, em seguida, alimentar essa lista em scp. Há alguma opção para isso?

cat /proc/version me dá Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014

    
por Morgan Delaney 11.12.2014 / 17:30

4 respostas

6

se você tiver o arquivo de texto já criado, faça o seguinte

cat /location/file.txt | xargs -i scp {} user@server:/location

isso irá linha por linha da saída do arquivo.txt e executará o comando coma por linha; Eu espero que isso ajude.

    
por 11.12.2014 / 18:14
1

A resposta fornecida funciona muito bem. Eu usei xargs -a para enviar o arquivo para o padrão. Eu então combinei isso com a resposta original de cat /location/file.txt | xargs -i scp {} user@server:/location

Minha resposta:

xargs -a /location/file.txt | xargs -i scp {} user@server:/location
    
por 23.04.2016 / 10:01
0

As respostas acima exigem que você autentique para cada arquivo transferido. O SCP é executado sobre o SSH e o GoDaddy fornece acesso a outros comandos por SSH, como o tar. Como tal, o melhor método é usar tar com ssh via:

tar -T <file> -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

Se a lista de arquivos estiver em STDIN, você pode fazer o seguinte: Observação: cat é usado aqui apenas para gerar STDIN

cat <file> | tar -T - -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

Para reduzir o tempo de transferência com o custo do tempo de processamento adicional, você pode adicionar -z ou -j aos dois comandos tar para ativar a compactação gzip ou bzip, respectivamente.

    
por 28.09.2017 / 23:08
0

Eu queria fazer o mesmo para a lista de pastas e nenhuma das respostas usando xargs funcionou para mim. No final, resolvi isso simplesmente com:

scp -r user@server:/location/{"$(cat folder_list.txt | tr '\n' ',' | sed 's/,$//')"} .

Onde eu passo minha lista de arquivos para a expansão do shell. Acho que isso pode ser útil para quem procura uma solução alternativa.

    
por 29.08.2018 / 16:41

Tags