Você pode usar rsync
, que fará apenas um ssh para o controle remoto, e fornecerá uma lista completa de arquivos ou uma lista de padrões glob de arquivos para copiar ou não. Por exemplo,
rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir
Isso excluiria nomes de arquivos como file-40.out
com 2 caracteres de 40 a 99 e também file-33.out
a 39 e também file-100.out
ou maior. Execute o comando com a opção -n
como mostrado para coletar a lista de nomes que seriam transferidos e, se isso for correto, remova a opção de fazer a cópia.
Note que rsync
não suporta chaves {}
em seus padrões glob. Formas alternativas de especificar os arquivos a serem copiados dependem de quão exótico é seu padrão de exclusão, mas um método infalível é usar -n
e nenhum padrão de exclusão para obter a lista completa de nomes, editá-la e fornecê-la como --files-from
lista de arquivos. Você também precisaria remover o dir*
do destino remoto:
rsync -av --files-from=list myremote: mylocaldir