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
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 umscp
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
- Infelizmente, essa solução foi interrompida por uma " bugfix " (consulte < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Resposta
Siga estas etapas:
-
Copiar diretório
local_dir
com todos os seus subdiretórios:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
copie apenas o conteúdo de
local_dir
e não o diretóriolocal_dir
em si:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
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
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.