2

Много-много раз в день мне хочется скопировать один или два файла из ~/src/some/path/or/other и ~/src/some/different/path на моем локальном компьютере в /srv/www/some/path/or/other и /srv/www/some/different/path соответственно на хосте тестирования. Эти два пути идентичны после ~/src и /srv /www соответственно - хотя, очевидно, я обычно опускаю имя файла во втором аргументе scp, который я сейчас использую.

Проблема в том, что я нередко просто целиком обращаюсь к вызову scp и копирую файл в неправильный каталог, или перезаписываю другой файл, потому что tab complete сумел меня перехитрить. Я мог бы rsync всего моего локального дерева на сервер через ssh, но я иногда даже не хочу загружать все это - только конкретный файл.

Я предполагаю, что мне нужен простой инструмент CLI, который позволит мне сделать (возможно, с небольшим количеством настроек) моральный эквивалент:

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

... и скопировал file на mydevhost.mycompany.com:/srv/www/myproject/path/to/ , а another-file скопировал на mydevhost.mycompany.com:/srv/www/myproject/another/path/ .

Конечно, есть трюк, который я пропускаю - или я должен просто написать один?

1 ответ1

3

Используйте rsync с опцией -R . Со справочной страницы rsync(1) :

   -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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .