Я хотел бы решить проблему с tar
и прозрачностью канала ssh
. Пример можно увидеть ниже, удаленный компьютер называется bar
. Перед тестом я создал три пустых файла в /tmp/foo
, выполнив ssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'
.
$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov 29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov 29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov 29 17:07 c
Флаг -T
tar
позволяет читать имена файлов для упаковки из следующего параметра, а -
означает стандартный ввод. Теперь вам просто нужно передать имя файла в него, которое может быть из ls
(как в примере) или find
для более сложных задач. С помощью этой настройки вы можете использовать sort
чтобы указать точный порядок передачи файлов по SSH (в этом случае -r
сортирует файлы в обратном алфавитном порядке). -v
добавляется только в окончательную распаковку tar
, так что порядок виден.