Копирование большого количества файлов с удаленного устройства без создания архива

0

Обычно, если бы я хотел скопировать файлы с удаленной машины, я бы сделал

scp user@remote.device:/folder/* .

Тем не менее, в этом случае есть так много файлов, которые я получаю ошибку

bash: /usr/bin/scp: Argument list too long

Теперь, решив эту проблему, я могу найти несколько способов создать архив tar на удаленной машине, не вызывая эту ошибку. Однако в этом случае на удаленном компьютере есть только небольшая SD-карта для хранения, поэтому нет места для создания архива.

Итак, что будет нормальным способом передачи файлов в этом случае? Я думаю, это не должно иметь большого значения, но в случае, если это так, моя локальная машина - Mac, а удаленная - Raspberry Pi.

Nathaniel
источник
Поскольку вы работаете на Mac, прочитайте этот пост и посмотрите, облегчает ли это то, что вы пытаетесь сделать. raspberrypi.stackexchange.com/questions/8950/...
NetworkKingPin
1
@NetworkKingPin, возможно, стоит попробовать в крайнем случае, но я хочу избежать установки программного обеспечения на другое устройство, поскольку его хранилище почти заполнено.
Nathaniel
У вас есть ответ, но для полноты другой путь это к передать архив без хранения например ssh user@remote 'cd folder; tar cf - .' | tar xf -, На GNU tar и, возможно, других, f - (используйте stdout / stdin соответственно) можно опустить. tar по умолчанию сохраняет оригинальное время scp -p; если хотите обновить, добавьте m после x,
dave_thompson_085

Ответы:

1

Вы должны использовать -r параметр scp, так:

scp -r user@remote.device:/folder/ ./

Обратите внимание, что в результате folder будет в конечном итоге как подпапка ./

David Dai
источник
Похоже, что это работает! Я удивлен, потому что мои файлы не находятся в подпапках. Кажется, намного быстрее, чем без -r флаг тоже. Есть ли у вас понимание того, почему?
Nathaniel
Это действительно работает, потому что это просто цель этого параметра. :) Но я не совсем уверен, почему так быстрее.
David Dai
Хм, в соответствии с man-страницей, цель параметра - вернуться в подпапки. Дело не в этом - мои файлы не находятся в подпапках - но, похоже, все равно работает, поэтому я не жалуюсь! Я предполагаю, что версия shell-glob открывает новое ssh-соединение для каждого файла, а это не так.
Nathaniel
Кажется, вы понимаете термин «рекурсивный» неправильно. Recurse означает файлы и подпапки, а также файлы и подпапки внутри подпапок и так далее.
David Dai
1
Это быстрее с -r потому что удаленная подсистема отправляет файлы в ваше локально запущенное приложение scp (процесс инициируется удаленным хостом, а ваш локальный хост просто подтверждает, как он получает), в то время как без -r Сначала ваш scp создает список файлов, а затем запрашивает для каждого файла удаленный хост, один за другим, создавая значительную задержку в сети.
Ziggy Crueltyfree Zeitgeister