Передача больших файлов (на 8 ГБ) по ssh

cd lib && ls -R  | grep '\.swp$' | xargs -d '\n' rm

Что касается Вашего оригинала, я сделал бы это:

find lib -name '*.swp' | xargs -d '\n' rm

потому что, если find возвраты никакие результаты Вы не получите ошибку.

Вы могли бы также хотеть использовать \! -type d так find не возвращает каталогов, которые, оказывается, называют *.swp, потому что rm не удался бы удалить их. Вы могли сделать что-то похожее с моим альтернативным использованием ls -RF потому что каталоги получили бы запаздывание / так не соответствуют regex.

27
26.08.2018, 17:42
3 ответа

Первоначальная проблема (основанная на прочтении всех комментариев к вопросу ОП) заключалась в том, что исполняемый файл scp на 64-битной системе представлял собой 32-битное приложение. 32-битное приложение, не скомпилированное с "поддержкой больших файлов", заканчивается указателями поиска, которые ограничиваются 2^32 =~ 4 Гб.

Вы можете определить, является ли scp 32-битным, используя команду file:

file `which scp`

На большинстве современных систем он будет 64-битным, поэтому усечения файлов не произойдет:

$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB  shared object, x86-64 ...

32-приложение все равно должно поддерживать "большие файлы", но оно должно быть скомпилировано из исходных текстов с поддержкой "больших файлов", чего в данном случае, очевидно, не произошло.

Рекомендуемым решением, возможно, будет использование полного стандартного 64-битного дистрибутива, в котором приложения по умолчанию компилируются как 64-битные.

9
27.01.2020, 19:39

Rsync очень хорошо подходит для передачи больших файлов по ssh, так как способен продолжить передачу, прерванную по какой-то причине. Так как она использует хэш-функции для обнаружения одинаковых файловых блоков, то функция продолжения достаточно надежна.

Удивительно, что ваши версии sftp/scp, кажется, не поддерживают большие файлы - даже при 32-битных двоичных файлах поддержка LFS должна быть довольно стандартной, в настоящее время.

33
27.01.2020, 19:39

Я не уверен насчет ограничений на размер файлов SCP и SFTP, но вы можете попробовать обойти проблему с split:

split -b 1G matlab.iso

Это создаст 1 гигабайт файлов, которые по умолчанию называются xaa, xab, xac, .... . Затем вы можете использовать scp для передачи файлов:

scp xa* xxx@xxx:

Затем на удаленной системе воссоздать исходный файл с cat:

cat xa* > matlab.iso

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

25
27.01.2020, 19:39

Теги

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