Eu sou novo no linux, quero copiar um arquivo do sistema remoto para o local ... agora estou usando o comando scp no sistema linux .. Tenho algumas pastas ou nomes de arquivos com espaços, quando tento copiar esse arquivo, ele mostra a mensagem de erro: "Esse arquivo ou diretório não existe"
Eu tentei:
scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/
Vi algumas referências on-line, mas não entendi perfeitamente, alguém pode ajudar nisso?
como posso escapar de espaços no nome do arquivo ou no diretório durante a cópia ...
Respostas:
Basicamente, você precisa escapá-lo duas vezes, porque escapou localmente e depois no lado remoto.
Existem algumas opções que você pode fazer (no bash):
fonte
scp [email protected]:'$(ls -t | head -1)' .
obter o arquivo criado mais recentemente no servidor ouscp [email protected]:'dir/*.{xml,pdf}' .
obter todos os arquivos xml e pdf de um diretório remoto. Em geral, eu prefiro isso do que ter conveniência com arquivos que possuem espaços. Arquivos com espaços são sempre um incômodo.trabalho
não funciona
O motivo é que a sequência é interpretada pelo shell antes que o caminho seja passado para o comando scp. Portanto, quando chega ao controle remoto, o controle remoto está procurando por uma sequência com aspas sem escape e falha
Para ver isso em ação, inicie um shell com as opções -vx, ou seja,
bash -vx
e ele exibirá a versão interpolada do comando enquanto o executa.fonte
"
ou single'
de trabalho o mesmoAlém disso, você pode fazer algo como:
O primeiro nível de aspas será interpretado por scp e o segundo nível preservará os espaços.
fonte
Use 3 barras invertidas para escapar de espaços nos nomes dos diretórios:
scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads
deve copiar para o seu
Downloads
diretório ofile
do diretório remoto chamadodirectory with spaces
.fonte
Eu tive uma enorme dificuldade em fazer com que isso funcionasse para uma variável de shell contendo um nome de arquivo com espaço em branco. Por alguma razão, usando
como na resposta de @ Adrian parece falhar.
Acontece que o que funciona melhor é usar uma expansão de parâmetro para colocar barras invertidas no espaço em branco , como a seguir.
fonte
file="${file//\ /\\\ }"
Desculpe por usar esta pergunta do Linux para colocar esta dica do Powershell no Windows 10: o caractere de espaço escapando com barras invertidas ou circundado por aspas não funcionou para mim neste caso. Não é eficiente, mas resolvi usando o "?" char em vez disso:
para o arquivo "tasks.txt Jun-22.bkp", baixei usando "tasks.txt? Jun-22.bkp"
fonte