Como copiar todos os arquivos de um diretório para um diretório remoto usando scp?

Meu objetivo é copiar apenas todos os arquivos de ~ / local_dir para [email protected] / var / www / html / target_dir usando scp e não crie a categoria local_dir em local_dir.

/var/www/html/target_dir/files.. 

mas não

/var/www/html/target_dir/local_dir/files.. quando usar o parâmetro -r

Comentários

  • scp * [email protected]:/var/www/html/target_dir não faz o que você quer? Em caso afirmativo, edite com mais detalhes do que você ' está tentando fazer & tentei até agora.
  • Anexando /. não é mais trabalho. Mais aqui

Resposta

scp tem o argumento -r. Então, tente usar:

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

O argumento -r funciona como o argumento -r em cp, ele irá transferir sua pasta inteira e todos os arquivos e subdiretórios dentro.

Comentários

  • Seu comando criou local_dir o diretório em / var / www / html / target_dir meu objetivo é copiar apenas arquivos.
  • Desculpe, entendi errado. Em seguida, basta repetir o comando, mas assim: $ scp -r ~/local_dir [email protected]:/var/www/html/ Em seguida, renomeie o novo diretório, se necessário.
  • Ou $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Qualquer faz seu barco flutuar.
  • Altere o curinga * para um ponto . e você ' Copia o conteúdo do diretório (incluindo quaisquer arquivos dot) sem copiar o próprio diretório. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Infelizmente, o uso de . foi quebrado por um scp

bugfix " (consulte < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync seria uma alternativa viável.

Resposta

Se seu objetivo é transferir todos os arquivos de local_dir o * curinga faz o truque:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

A opção -r significa “recursivamente”, então você deve escrevê-la quando estiver tentando transferir um diretório inteiro ou vários diretórios.

De man scp:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

Portanto, se você tiver subdiretórios dentro de local_dir, o último exemplo transferirá apenas arquivos, mas se você definir a opção -r, ele transferirá arquivos e diretórios.

Comentários

  • 1+ Porque você precisa ler os comentários na resposta aceita para chegar à resposta correta, enquanto este apenas explica diretamente.

Resposta

Anexando /. a seu diretório de origem irá transferir seu conteúdo em vez do próprio diretório. Em contraste com a solução curinga, isso também incluirá todos os arquivos ocultos.

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

O crédito por esta solução vai para roaima, mas achei que deveria ser postado como uma resposta real, não apenas um comentário.

Comentários

Resposta

Siga estas etapas:

  1. Copiar diretório local_dir com todos os seus subdiretórios:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. copie apenas o conteúdo de local_dir e não o diretório local_dir em si:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Não use: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir como ele lança um erro (acabei de testar e recebeu o seguinte erro):

    scp: error: unexpected filename: . 

Comentários

  • Também recebo o erro de nome de arquivo inesperado. No entanto, o uso do curinga também não funciona porque o diretório tem muitos arquivos que excede o limite de caracteres para comandos quando o curinga é expandido. macOS
  • @RichardKiefer: Você pode usar curingas como? com * para isolar ainda mais os resultados da pesquisa e, em seguida, passá-los para o scp. Tente este link, pode ajudar: Curingas
  • Obrigado Syed, mas meu ponto é que eu realmente quero direcionar todos os elementos na pasta , e não filtrar nenhum. E se meu diretório tiver muitos, o curinga simplesmente não funcionará.
  • @RichardKiefer: Minhas desculpas, Richard, para copiar todos os arquivos, podemos usar um pequeno script bash. Use: ls -l | awk '{print $9}' e redirecione toda a saída (que seriam todos os nomes de arquivo) para um arquivo txt. Leia o arquivo txt, uma linha por vez, e use essa entrada com scp para copiar os arquivos: input=/home/user/filename.txt while IFS= read -r line

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *