ssh
Даже в сложном случае вы можете обрабатывать передачу файлов с помощью одной командной строки, просто с помощью ssh
;-) И это полезно, если remote1
не может подключиться к localhost
:
ssh user1@remote1 'ssh user2@remote2 "cat file"' > file
tar
Но вы потеряете свойства файла (право собственности, разрешения ...).
Однако tar
ваш друг сохранит эти свойства файла:
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar c file"' | tar x
Вы также можете сжать, чтобы уменьшить пропускную способность сети:
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj file"' | tar xj
И tar
также позволяет переносить рекурсивный каталог через basic ssh
:
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj ."' | tar xj
ionice
Если файл огромен и вы не хотите беспокоить другие важные сетевые приложения, вы можете пропустить ограничение пропускной способности сети, предоставляемое scp
и rsync
(например, scp -l 1024 user@remote:file
не использует более 1 Мбит / с).
Но обходной путь использует ionice
, чтобы сохранить одиночная командная строка:
ionice -c2 -n7 ssh u1@remote1 'ionice -c2 -n7 ssh u2@remote2 "cat file"' > file
Примечание: ionice
может быть недоступно в старых дистрибутивах.
Не уверен, почему ты этого хочешь, поэтому я просто дам несколько советов.
Папка с отслеживаемыми файлами в репозитории Git имеет собственную ревизию, которая хранится в виде древовидного объекта. Объект записывает имена своих файлов и подпапок и собственные хеши объектов. Но объект не хранит свой собственный путь, который хранится в объекте дерева его родительской папки. Если это корневая папка репозитория, его путь не сохраняется вообще. Потому что это может быть любое имя, когда оно клонируется или инициализируется.
Скажите, что путь к папке в хранилище - ./foo
. Вы можете запустить git ls-tree <commit> -- foo
или git rev-parse <commit>:foo
, чтобы увидеть хеш дерева foo
. Вы можете пометить его как git tag <tagname> <tree_hash>
или не зная его хеш git tag <tagname> <commit>:foo
.
С помощью тега вы можете выдвигать или извлекать связанные объекты, или извлекать фактические файлы и подпапки, или манипулировать ими с помощью сантехнических команд.
Поскольку мы можем использовать <commit>:<path>
для описания пути и содержимого папки, вам не нужно создавать дополнительный тег, если вы знаете коммит и путь.