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

68

Meu objetivo é copiar apenas todos os arquivos de ~ / local_dir para [email protected] / var / www / html / target_dir usando scp e não criar 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

Edgaras Karka
fonte
11
Não scp * [email protected]:/var/www/html/target_dirfaz o que você quer? Nesse caso, edite com mais detalhes o que você está tentando fazer e tentou até agora.
Michael Homer
Anexando /. não é mais trabalho. Mais aqui
Tsulatsi Tamim 20/03

Respostas:

91

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

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

O argumento -r funciona exatamente como o -r arg no cp, ele transfere toda a pasta e todos os arquivos e subdiretórios.

parazyd
fonte
5
Seu comando criou o local_dirdiretório em / var / www / html / target_dir, meu objetivo é copiar apenas arquivos.
Edgaras Karka #
Desculpe, entendi errado. Em seguida, basta repetir o comando, mas assim: $ scp -r ~/local_dir [email protected]:/var/www/html/Renomeie o novo diretório, se necessário.
parazyd
8
Ou o que $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dirquer que flutue no seu barco.
parazyd
Como excluir certos diretórios do local, enquanto copiando para remoto
Sushivam
13
Altere o curinga *para um ponto .e você copiará o conteúdo do diretório (incluindo qualquer arquivo de ponto) sem copiar o próprio diretório. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
roaima
19

Se o seu objetivo é transferir todos os arquivos a partir local_dirdo *curinga faz o truque:

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

A -ropção significa "recursivamente", portanto 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 local_dir, o último exemplo transferirá apenas arquivos, mas se você definir a -ropção, ele transferirá arquivos e diretórios.

tachomi
fonte
1+ Porque você precisa ler os comentários na resposta aceita para obter a resposta correta, enquanto este apenas explica diretamente.
André Christoffer Andersen
17

Anexar /.ao seu diretório de origem transferirá seu conteúdo em vez do próprio diretório. Ao contrário da solução curinga, isso incluirá também os arquivos ocultos.

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

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

raphinesse
fonte
0

Siga esses passos:

  1. Copie o diretório local_dircom todos os seus subdiretórios:

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

    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_dirpois gera um erro (apenas testado e recebido o seguinte erro):

    scp: error: unexpected filename: .
    
Syed Faraz Umar
fonte