Как я могу скопировать несколько файлов по scp в одной команде?

Я должен транспортировать много файлов от одного ПК до другого (оба Linux). Я хотел бы использовать scp для этого, но scp только допускает передачу одного файла за один раз.

Как я могу сделать это?

Я имею

  • Никакая возможность использовать rsync или любой другой протокол
  • Никакая возможность использовать сертификаты без паролей (но иметь сертификат с паролем)
  • Список файлов для передачи и список с целевым путем файлов на другом сервере
  • Файлы распространены по большому количеству каталогов и не всем файлам в каталогах, которые я хочу скопировать

Если возможно, я хотел бы к gzip и ungzip прозрачно сохранить пропускную способность!

Действительно ли это возможно?

20
задан 03.03.2014, 21:31

3 ответа

Использовать tar:

tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
31
ответ дан 07.12.2019, 10:09

Я хотел бы использовать scp для этого, но scp только допускает передачу одного файла за один раз.

Я вполне уверен, который не верен, по крайней мере, не для scp команда, обеспеченная OpenSSH, включена с большинством дистрибутивов Linux.

Я использую scp file1 file2 ... fileN user@host:/destination/directory/ справедливо часто.

Для прозрачного сжатия протоколу SSH встроили это и scp может использовать его, если Вы обеспечиваете -C опция на командной строке. Для большого количества подобных маленьких файлов Вы найдете, что tar+gz опция, предложенная akira, получает лучшее сжатие, поскольку это может использовать подобие между такими файлами где scp сжатия каждый файл как отдельный объект. Я обычно предпочитаю использовать scp хотя, поскольку легче возобновить частичную передачу (или, хотя я знаю в этой ситуации, у корреспондента нет опции), rsync поскольку это и еще легче возобновить и совместно использует преимущество сжатия целого потока tar+gz опции.

14
ответ дан 07.12.2019, 10:09

Не делает scp -r yourdir otherhost:/otherdir работа?

Попробуйте это затем:

tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"

z- флаг к tar делает сжатие. Или можно использовать-C для ssh:

tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
4
ответ дан 07.12.2019, 10:09

Теги

Похожие вопросы