Qual é o comando para o ssh encontrar arquivos que * .png e baixá-los?

4

Eu estava conectado meu OpenSSH, mas Qual é o comando para o ssh encontrar todos os arquivos que são * .png e obtê-los ao mesmo tempo, recursivamente

    
por Smile.Hunter 08.08.2011 / 10:46

2 respostas

6

Você pode listar arquivos de seu interesse com ssh e, em seguida, baixá-los com scp :

ssh user@host find /remote_path -iname '*.png' | 
  while read pngfile; do 
    scp user@host:"$pngfile" /local_path
  done

Todos os arquivos *.png sob /remote_path serão baixados para /local_path , mas a estrutura de diretórios remotos não será criada (todos os arquivos serão colocados no mesmo diretório), então você pode ter problemas se tiver dois arquivos com o mesmo nome em diretórios diferentes.

Editar

A linha de comando remota find deve ser corrigida da seguinte forma:

find /remote_path -iname "'*.png'"

onde o par interno de aspas simples é necessário para evitar a expansão do nome do caminho do shell local de * , onde o par externo de aspas duplas é necessário para evitar a expansão remota do caminho do shell de * .

Os dois tipos de citações podem ser trocas e outras sintaxes podem ser usadas, como \''*.png'\' , \""*.png"\" ou "\"*.png\"" .

Se você não tem .png no diretório home remoto, não há diferença entre os dois comandos, mas é melhor estar seguro.

    
por enzotib 08.08.2011 / 11:01
2

A maneira mais rápida que eu sei é criar o tar.gz remotamente, transferi-lo via SSH e descompactar localmente:

ssh user@remotehost 'find /remote/path/ -name "*.png" -print0 2>/dev/null | xargs -0 tar cfz - ' | tar xvfz -

Isso funcionará com nomes de arquivos com espaços e será mais rápido que scp -r e muito mais rápido que scp para cada arquivo.

    
por Michał Šrajer 08.08.2011 / 14:39