4

У меня 1,6 миллиона файлов на сервере A, и только около 20 000 из них нужно получить на сервер B. Место назначения, сервер B, находится на общем хостинге GoDaddy, поэтому я почти ограничен scp для передачи сразу нескольких файлов.

Я хотел бы сгенерировать .txt файл из этих 20k+ файлов из SQL-запроса, а затем передать этот список в scp. Есть ли варианты сделать это?

cat /proc/version предоставляет мне Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 (mockbuild@koji.cloudlinux.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014

4 ответа4

6

если у вас уже есть текстовый файл, вы делаете следующее

cat /location/file.txt | xargs -i scp {} user@server:/location

это будет строка за строкой выводить файл file.txt и запускать команду scp для каждой строки; Надеюсь, это поможет.

1

Приведенный ответ прекрасно работает. Я использовал xargs -a для отправки файла в стандартный формат . Затем я объединил это с оригинальным ответом cat /location/file.txt | xargs -i scp {} user@server:/location

Мой ответ:

xargs -a /location/file.txt | xargs -i scp {} user@server:/location
0

Я хотел сделать то же самое для списка папок, и ни один из ответов, использующих xargs работал для меня. В конце концов, я решил это просто:

scp -r user@server:/location/{"$(cat folder_list.txt | tr '\n' ',' | sed 's/,$//')"} .

Где я передаю свой список файлов для расширения оболочки. Я думаю, что это может быть полезно для всех, кто ищет альтернативное решение.

0

Приведенные выше ответы требуют аутентификации для каждого переданного файла. SCP работает поверх SSH, а GoDaddy предоставляет доступ к другим командам по SSH, таким как tar. Таким образом, лучший способ - использовать tar с ssh через:

tar -T <file> -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

Если список файлов находится на STDIN, вы можете сделать следующее: Примечание: здесь используется cat для генерации только STDIN.

cat <file> | tar -T - -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

Чтобы сократить время передачи за счет дополнительного времени обработки, вы можете добавить -z или -j к обеим командам tar, чтобы включить сжатие gzip или bzip соответственно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .