Eu resolvo o problema com tar
e a transparência do pipe de ssh
. Um exemplo pode ser visto abaixo, o PC remoto é denominado bar
. Antes do teste, criei três arquivos vazios em /tmp/foo
executando 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 sinal -T
de tar
faz com que ele leia os nomes dos arquivos para compactar a partir do próximo parâmetro e -
significa a entrada padrão. Agora você só precisa canalizar o nome dos arquivos para ele, que pode vir de ls
(como no exemplo) ou find
para tarefas mais complicadas. Com essa configuração, você pode usar sort
para indicar a ordem exata em que os arquivos serão transmitidos por SSH (nesse caso, -r
arquivos classificados em ordem alfabética reversa). O -v
é adicionado somente ao final, descompactando tar
, para que a ordem fique visível.