Ordem de transferência recursiva de arquivo SCP

11

Pensando se é possível especificar uma ordem de classificação ao transferir arquivos com scp.

Por exemplo: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

Como talvez isso possa estar relacionado a como as scpfunções, existe alguma maneira de configurar o ssh no lado da fonte (servidor) para que os arquivos sejam transferidos, por exemplo, em ordem crescente de nome de arquivo?

Dmitry Minkovsky
fonte

Respostas:

4

Eu resolveria o problema tare a transparência dos tubos ssh. Um exemplo pode ser visto abaixo, o PC remoto é nomeado bar. Antes do teste, eu criei três arquivos vazios /tmp/fooexecutando ssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'.

$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 c

O -Tsinalizador de tarfaz com que ele leia nomes de arquivos para compactar a partir do próximo parâmetro e -significa a entrada padrão. Agora você só precisa inserir o nome dos arquivos nele, que podem vir ls(como no exemplo) ou findpara tarefas mais complicadas. Com essa configuração, você pode sortindicar a ordem exata em que os arquivos serão transmitidos através do SSH (nesse caso, os -rarquivos classificados em ordem alfabética inversa). Ele -vé adicionado apenas à final, descompactando tar, para que o pedido seja visível.

dnet
fonte
Woah, ótima abordagem de nível inferior e apresentando a imagem mais ampla de maneira tão clara. Obrigado.
Dmitry Minkovsky
Como essa abordagem pode ser estendida para transferir arquivos individualmente, e não em um arquivo morto? Seria um loop iteração sobre os resultados de sortno barcomando remoto de alguma forma conseguir isso?
Dmitry Minkovsky
Pode, mas não vejo o problema de transferi-lo como um arquivo. Se você pensar bem, não há muita diferença entre essa abordagem e scp- ambos enviam metadados e conteúdos para cada arquivo, eles apenas usam um "protocolo" diferente. Eu acho que você pode iterar sobre os resultados, mas deve cuidar de arquivos com espaço em branco em seus nomes.
Dnet
2
@dimadima, se você gosta tanto da resposta, talvez possa aceitar a resposta .
Peter V. Mørch
Essa resposta funciona, mas é preciso ajustá-la ao caso em que os arquivos têm espaços nos nomes.
Ruslan
1

Pode-se conseguir a transferência de arquivos em ordem alfabética usando rsync:

rsync -P -e ssh -r user@remote_host:/some_path local_path

Ppermite o download parcial, edefine o protocolo SSH e rbaixa recursivamente.

Lenar Hoyt
fonte
0

Caso isso ajude alguém, forneci uma solução simples aqui:

/programming/23067175

Ainda à espera de uma maneira mais inteligente de fazê-lo!

Victor Sojo
fonte
1
Este é apenas um link. Para uma resposta completa, forneça a resposta aqui e forneça o link para referência.
precisa