[... files download in a seemingly random order ...]
Поскольку, возможно, это может быть связано с тем, как scpвыполняются функции, существует ли какой-либо способ настроить ssh на стороне источника (сервера), чтобы файлы передавались, например, в порядке возрастания имени файла?
Я бы решил проблему с 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, так что порядок виден.
Вау, отличный подход нижнего уровня и четкое представление общей картины. Спасибо.
Дмитрий Минковский
Как можно расширить такой подход для передачи файлов по отдельности, а не в архиве? Будет ли цикл, повторяющий результаты sortв barудаленной команде, каким-то образом достигать этого?
Дмитрий Минковский
Возможно, но я не вижу проблемы с передачей его в качестве архива. Если подумать, между этим подходом нет большой разницы и scp- и отправка метаданных, и содержимого для каждого файла, они просто используют другой «протокол». Я думаю, вы могли бы перебрать результаты, но тогда вам следует позаботиться о файлах с пробелами в их именах.
dnet
2
@dimadima, если вам так нравится ответ, возможно, вы могли бы принять ответ .
Питер В. Мёрч
Этот ответ работает, но его нужно адаптировать к случаю, когда в файлах есть пробелы в именах.
Руслан
1
Можно добиться передачи файлов в алфавитном порядке, используя rsync:
sort
вbar
удаленной команде, каким-то образом достигать этого?scp
- и отправка метаданных, и содержимого для каждого файла, они просто используют другой «протокол». Я думаю, вы могли бы перебрать результаты, но тогда вам следует позаботиться о файлах с пробелами в их именах.Можно добиться передачи файлов в алфавитном порядке, используя
rsync
:P
позволяет частичную загрузку,e
устанавливает протокол SSH иr
загружает рекурсивно.источник
В случае, если это кому-то поможет, я предоставил простое решение здесь:
/programming/23067175
Все еще жду более умного способа сделать это!
источник