Normalmente, as linhas de comando são interpretadas pelo shell uma vez. No entanto, por razões históricas, scp passa o nome do arquivo para o shell remoto também, então o nome do arquivo é interpretado por shells duas vezes . Isso também faz com que coisas como scp remote:'/path/prefix*' /path/local/
work, o shell remoto esteja expandindo /path/prefix*
.
A maneira mais fácil de evitar a segunda expansão é usar o sftp, que não usa um shell remoto. Ainda faz expansão glob, mas desde que você pode dar comandos em stdin, você pode evitar a expansão de shell local inteiramente.
Além disso, você pode usar qualquer um dos mecanismos normais de citação de shell, incluindo os fornecidos por @Jed Daniels e @Rik Schneider, mas eu queria explicar o que realmente está acontecendo e mencionar o sftp.
(Você pode usar todos os tipos de recursos do shell em seu nome de arquivo scp, por exemplo, scp server:\$HOME/file dest
usará a ideia do shell remoto de $HOME
, ao passo que você tirou o \
, ele usaria seu shell local .