Los nombres remotos pasados scp
se interpretan realmente como una lista de patrones separados por espacios en blanco en el lado remoto. Esto suele ser una molestia cuando intentas copiar un archivo cuyo nombre contiene espacios, pero aquí es útil: scp -p 'user@machine:/path/a*' .
copiaría todos los archivos cuyo nombre comienza con a
.
Su comando funcionará si cita el patrón para que se interprete de forma remota en lugar de local, siempre que pase otro obstáculo. El patrón !(a*)
no es un patrón de shell básico, es una extensión ksh (que bash y zsh también son compatibles si configura la opción adecuada). Así que esto sólo funcionará si su shell remoto es ksh, no si se trata de alguna otra concha y que exec ksh
a partir de .profile
o algo similar.
La manera fácil, a menos que se encuentre en algún tipo de ambiente restringido o antiguo, es olvidarse de él scp
. Desea que los archivos remotos funcionen igual que los archivos locales, así que conviértalos en archivos locales: monte el directorio remoto con sshfs . Esto requiere FUSE en la máquina local y un servidor SFTP (es decir, un sftp-server
ejecutable que se sshd
inicia) en la máquina remota.
mkdir ~/net/machine
sshfs user@machine:/ ~/net/machine
cp -p ~/net/machine/path/!(a*) .