Estoy tratando de copiar todos los archivos que no comienzan con la letra "a", en ksh.
La copia de la máquina de origen a la máquina de destino funciona bien :
scp -p !(a*) user@machine:/path/directory/.
Pero, si estoy en el servidor de destino y quiero copiar desde el servidor de origen, está fallando:
scp -p user@machine:/path/!(a*) .
¿Algunas ideas?
Lo que descubrí fue que en las máquinas HP-UX más antiguas (parisc 11.11), tenía que usar [^ a] * ¡Pero, en las máquinas más nuevas (parisc 11.31 y más nuevas) funciona! (A *)
Esto es con lo que terminé. Y funciona:
fuente
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 cona
.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 queexec 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, unsftp-server
ejecutable que sesshd
inicia) en la máquina remota.fuente