Estou tentando copiar todos os arquivos que não começam com a letra "a", em ksh.
A cópia da máquina de origem para a máquina de destino está funcionando bem :
scp -p !(a*) user@machine:/path/directory/.
Mas, se eu estiver no servidor de destino e quiser copiar do servidor de origem, está falhando:
scp -p user@machine:/path/!(a*) .
Alguma ideia?
O que descobri foi que em máquinas HP-UX mais antigas (parisc 11.11), eu tinha que usar [^ a] * Mas, em máquinas mais novas (parisc 11.31 e mais recentes), ele trabalha com! (A *)
Foi assim que acabei. E funciona:
fonte
Os nomes remotos transmitidos para
scp
são realmente interpretados como uma lista de padrões separados por espaços em branco no lado remoto. Isso costuma ser 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 coma
.Seu comando funcionará se você citar o padrão para que seja interpretado remotamente e não 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 o bash e o zsh também suportam se você definir a opção apropriada). Então, isto só irá funcionar se o seu shell remoto é ksh, não se é algum outro shell e vocêexec ksh
de.profile
ou algo similar.A maneira mais fácil, a menos que você esteja em algum tipo de ambiente restrito ou antigo, é esquecer
scp
. Você deseja que os arquivos remotos funcionem exatamente como os arquivos locais; portanto, torne-os arquivos locais: monte o diretório remoto com sshfs . Isso requer o FUSE na máquina local e um servidor SFTP (ou seja, umsftp-server
executável que ésshd
iniciado) na máquina remota.fonte