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.
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
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
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.
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.