scp todos los archivos que terminan en '-123.jpg': recursividad, espacios, comodines...

scp todos los archivos que terminan en '-123.jpg': recursividad, espacios, comodines...

Están sucediendo demasiadas cosas para mí como para entender mi cabeza de novato por aquí. Quiero descargar todos los archivos que terminan en -123.jpg de una multitud de directorios anidados en un servidor remoto. Algunos de estos directorios tienen espacios en sus nombres. Estoy pensando que el comando debería ser similar a:

scp -r user@server:/path/to/parent\ directory/*/*/*123\.jpg ./

… donde "directorio padre\" es un nombre de directorio con un espacio, y la ruta especificada es lo más profunda posible antes de dividirse en varios subdirectorios, por ejemplo, archivo dir/sub dir/[uniquely_id]-123.jpg . (Tenga en cuenta que estos subdirectorios a menudo también contienen espacios, en caso de que eso afecte al comodín *)

Recibo "no hay coincidencia" para esto, o "no existe tal archivo o directorio" si me entrometo con el escape del espacio. Por tanto, creo que es la recursividad o el comodín lo que me equivoqué.

Gracias de antemano.

Respuesta1

Escapar el nombre del archivo con scp es complicado; sus argumentos se (re)expanden en el lado remoto. Los caracteres "interesantes" deben estar entre comillas dobles, para evitar una manipulación especial por parte del shell local y del control remoto. Espero que lo siguiente funcione para usted:

scp user@server:'/path/to/parent\ directory/*/*/*123.jpg' ./
scp user@server:'"/path/to/parent directory"/*/*/*123.jpg' ./

Si esto le resulta confuso, rsync es bastante fácil de usar (como menciona Lothar), y canalizar tar o cpio a través de ssh también es bastante fácil.

ssh user@server 'cd /path/to/parent\ directory;
                 find -name "*123.jpg" -print0 | cpio -0 -o' |
    cpio -i -d -v

Respuesta2

Al carecer del diseño de su servidor para realizar pruebas, no sé si el siguiente comando realmente funciona, pero creo que rsync sería mejor que scp en ese caso, ya que puede especificar patrones de entrada y exclusión. Algo como:

rsync -arvzSH  --include "*123.jpg" --exclude "*" user@server:/path/to/parent\ directory/ /path/to/target directory/

podría funcionar. Pero será mejor que vuelvas a comprobar eldocumentación rsync.

Respuesta3

Una solución alternativa para scp con comodines:

for i in "*-123.jpg"
do 
    scp $i <user>@<server>:/path/to/destination/
done

Referirse:https://community.hpe.com/t5/System-Administration/How-to-scp-mutiple-files-using-wild-chars-or-in-a-single-scp/mp/3639440/highlight/true# M238959

Respuesta4

Esto correctamente debe hacerse en dos partes:

  1. primero busque todos los archivos necesarios y cópielos en una carpeta (esto no funciona si tiene los mismos nombres de archivo); puede hacerlo con uno findy-exec
  2. luego envía un montón de archivos usandoscp

scpno es lo suficientemente avanzado para copiar la estructura de carpetas y no existe un comando único para hacer una copia de un árbol de carpetas.

Además, si necesita todos los archivos en carpetas, ya que no podrá seleccionarlos mediante comodines y desea conservar la estructura de las carpetas, puede utilizar mc= Midnight Commander y su "enlace Shell".

información relacionada