Scp más inteligente que duplica parte de la ruta local

Scp más inteligente que duplica parte de la ruta local

Muchas, muchas veces al día, me encuentro deseando copiar uno o dos archivos desde ~/src/some/path/or/othery ~/src/some/different/pathen mi máquina local, hacia /srv/www/some/path/or/othery /srv/www/some/different/pathrespectivamente en un host de prueba. Las dos rutas son idénticas después de ~/src y /srv/www respectivamente, aunque obviamente normalmente omito el nombre del archivo en el segundo argumento de scp, que uso actualmente.

El problema es que, con bastante frecuencia, toco la invocación scp por completo y copio el archivo en el directorio equivocado, o sobrescribo un archivo diferente porque la pestaña completa logra ser más astuto que yo. Podría sincronizar todo mi árbol local con el servidor a través de ssh, pero a veces no quiero cargar todo todavía, solo un archivo específico.

Supongo que lo que quiero es una herramienta CLI simple que me permita hacer (tal vez con un poco de configuración) el equivalente moral de:

jkg5150@dev-laptop:~/src/myproject$ funkytool path/to/file another/path/another-file mydevhost.mycompany.com

...y filelo he copiado mydevhost.mycompany.com:/srv/www/myproject/path/to/y another-filelo he copiado mydevhost.mycompany.com:/srv/www/myproject/another/path/.

Seguramente hay un truco que me falta, ¿o debería simplemente escribir uno?

Respuesta1

Utilice rsync con la -Ropción. Desde la rsync(1)página de manual:

   -R, --relative
          Use  relative  paths. This means that the full path names speci‐
          fied on the command line are sent to the server rather than just
          the  last  parts  of  the filenames. This is particularly useful
          when you want to send several different directories at the  same
          time. For example, if you used this command:

             rsync -av /foo/bar/baz.c remote:/tmp/

          ...  this would create a file named baz.c in /tmp/ on the remote
          machine. If instead you used

             rsync -avR /foo/bar/baz.c remote:/tmp/

          then a file named /tmp/foo/bar/baz.c would  be  created  on  the
          remote machine, preserving its full path.  These extra path ele‐
          ments are called "implied directories" (i.e. the "foo"  and  the
          "foo/bar" directories in the above example).

información relacionada