Порядок передачі файлів 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.