Os nomes remotos transmitidos para scp
são realmente interpretados como uma lista de padrões separados por espaço em branco no lado remoto. Isso geralmente é um aborrecimento quando você tenta copiar um arquivo cujo nome contém espaços, mas aqui é útil: scp -p 'user@machine:/path/a*' .
copia todos os arquivos cujo nome começa com a
.
Seu comando funcionará se você citar o padrão para que seja interpretado remotamente em vez de localmente, desde que você passe por outro obstáculo. O padrão !(a*)
não é um padrão básico de shell, é uma extensão ksh (que bash e zsh também suportam se você definir a opção apropriada). Portanto, isso só funcionará se o shell remoto for ksh, não se for algum outro shell e você exec ksh
de .profile
ou algo semelhante.
A maneira mais fácil, a menos que você esteja em algum tipo de ambiente restrito ou antigo, é esquecer scp
. Você gostaria que os arquivos remotos funcionassem como os arquivos locais, portanto, crie arquivos locais: monte o diretório remoto com sshfs . Isso requer o FUSE na máquina local e um servidor SFTP (ou seja, um executável sftp-server
que sshd
lança) na máquina remota.
mkdir ~/net/machine
sshfs user@machine:/ ~/net/machine
cp -p ~/net/machine/path/!(a*) .