SCP рекурсивный порядок передачи файлов


11

Интересно, можно ли указать порядок сортировки при передаче файлов с помощью scp.

Например: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

Поскольку, возможно, это может быть связано с тем, как scpвыполняются функции, существует ли какой-либо способ настроить ssh на стороне источника (сервера), чтобы файлы передавались, например, в порядке возрастания имени файла?

Ответы:


4

Я бы решил проблему с 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:

rsync -P -e ssh -r user@remote_host:/some_path local_path

Pпозволяет частичную загрузку, eустанавливает протокол SSH и rзагружает рекурсивно.


0

В случае, если это кому-то поможет, я предоставил простое решение здесь:

/programming/23067175

Все еще жду более умного способа сделать это!


1
Это просто ссылка. Для полного ответа предоставьте ответ здесь, а затем предоставьте ссылку для справки.
Кевин Панко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.