SCP mais inteligente que duplica parte do caminho local

2

Muitas, muitas vezes por dia, quero copiar um ou dois arquivos de ~/src/some/path/or/other e ~/src/some/different/path em minha máquina local para /srv/www/some/path/or/other e /srv/www/some/different/path em um host de teste. Os dois caminhos são idênticos depois de ~ / src e / srv / www, respectivamente - embora, obviamente, eu geralmente omita o nome do arquivo no segundo argumento para scp, que eu uso atualmente.

O problema é que, com bastante frequência, deduro totalmente a invocação do scp e copio o arquivo para o diretório errado, ou sobrescrevo um arquivo diferente porque a aba completa consegue me enganar. Eu poderia rsync minha árvore local inteira para o servidor através de ssh, mas às vezes eu não quero carregar a coisa toda ainda - apenas um arquivo específico.

Eu acho que o que eu quero é uma ferramenta CLI simples que me permita fazer (talvez com um pouco de configuração) o equivalente moral de:

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

... e ter file copiado para mydevhost.mycompany.com:/srv/www/myproject/path/to/ e another-file copiado para mydevhost.mycompany.com:/srv/www/myproject/another/path/ .

Certamente há um truque que estou perdendo - ou devo escrever apenas um?

    
por James Green 24.01.2013 / 21:01

1 resposta

3

Use o rsync com a opção -R . Na página rsync(1) man:

   -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).
    
por 26.01.2013 / 20:03

Tags