Вопрос или проблема
Мне нужно копировать большие файлы по сети, но я не уверен, какую команду использовать для этого. Я использовал rsync, но, возможно, мне стоит сначала заархивировать файлы?
rsync
уже предоставляет сжатие, если вы укажете опцию -z
. Вам следует избегать применения этой опции для уже сжатых файлов или бинарных файлов, так как это только добавит дополнительные затраты.
Когда вы используете rsync с протоколом ssh (по умолчанию) и у вас ограниченные ресурсы ЦП, а безопасность не является проблемой, вы также можете попробовать указать -e ssh -c arcfour
, чтобы использовать менее дорогостоящий алгоритм шифрования (RC4). Однако на современных ЦП это не приведет к значительной разнице.
Другие интересные аргументы, которые вы можете использовать:
-vP
для красивой индикаторной строки и сохранения частично переданных файлов при прерывании, чтобы вы могли возобновить с частичного файла в следующий раз, когда запуститеrsync
-a
для сохранения большинства (но не всех!) метаданных файлов, таких как права доступа и время изменения
Я не уверен, понимаю ли я, есть ли у вас проблема с сжатием файлов или проблема с передачей файлов, или у вас просто общий вопрос. Я пойду по второму пути.
Если у вас есть несколько файлов в папке, вы можете заархивировать их в один архив (.tar) файл: tar -cvf myfile.tar myfolder
Затем вы можете сжать этот файл, используя очень хороший компрессор, например lzma: lzma myfile.tar
. Обратите внимание, что вы также можете указать tar сжать с помощью опций -z
(gzip), -j
(bzip2) или --lzma
, в этом случае вы выполните одну команду, например: tar --lzma -cvf myfile.tar.lzma myfolder
.
Затем вы можете скопировать ваш файл, используя rsync
или scp
, и распаковать его (lzma -d myfile.tar.lzma
) и затем извлечь (tar -xvf myfile.tar
) на целевой системе. Если вы использовали одну команду, команда для извлечения будет: tar --lzma -xvf myfile.tar.lzma
.
Вы также можете указать rsync сжимать с помощью опции -z
и не беспокоиться о создании заранее архивного файла.
Обратите внимание, что вы также можете использовать cURL.
Мой случай использования заключался в копировании нескольких очень больших видеофайлов с одного веб-хостинга на другой (один был 1.1 Гб, другой – 750 Мб и т.д.)
К счастью, желаемый веб-хостинг (Namecheap) уже имел установленный cURL в своем терминальном приложении с оболочкой jail.
В терминале перейдите в желаемую папку назначения.
Команда, которую я использовал, была:
cURL -O https://mydomain.com/pathto/thefile/desiredfile.mp4
Сработало отлично. Я был приятно удивлён скоростью передачи (файл 1 Гб передался за примерно 90 секунд).
** Примечание: Опция -O (заглавная буква “O”) говорит “использовать то же имя для целевого файла”. Чтобы переименовать файл на стороне назначения, используйте -o (маленькая буква “о”) и укажите целевое имя файла в качестве последнего параметра.
Ссылки:
https://www.studytonight.com/linux-guide/curl-in-linux-how-to-transfer-data
.
Ответ или решение
Копирование больших файлов по сети может стать комплексной задачей, особенно при выборе правильного инструмента и метода. В этом ответе мы рассмотрим несколько подходов, включая использование rsync
, возможность архивирования и сжатия файлов, а также альтернативные методы, такие как cURL
.
Использование rsync
rsync
— один из самых популярных инструментов для копирования файлов и директорий, который предлагает не только простоту в использовании, но и множество опций для оптимизации процесса.
-
Команда
rsync
:
Чтобы скопировать файл по сети, можно воспользоваться следующей командой:rsync -avz source_file user@hostname:/path/to/destination
-a
: включает режим архива, сохраняющий метаданные (права доступа, временные отметки и т.д.).-v
: включает подробный вывод.-z
: активирует сжатие данных во время передачи, что особенно полезно для текстовых файлов, но для уже сжатых (например, видео) может быть излишним.
-
Дополнительные опции:
-P
: позволяет отслеживать прогресс передачи и сохранять частично переданные файлы на случай прерывания.-e ssh
: если необходимо использоватьssh
для безопасного копирования:rsync -avz -e "ssh -c arcfour" source_file user@hostname:/path/to/destination
Например, использование
-c arcfour
может сократить время процессора при работе с ограниченными ресурсами, но это решение не всегда целесообразно на современных процессорах.
-
Архивирование и сжатие:
Если вы копируете несколько файлов, имеет смысл сначала создать архив с помощьюtar
, а затем сжать его:tar -cvf myfile.tar myfolder lzma myfile.tar
Для одного шага:
tar --lzma -cvf myfile.tar.lzma myfolder
Чтобы восстановить архив:
tar --lzma -xvf myfile.tar.lzma
Альтернативный метод с использованием cURL
Если у вас есть доступ к файлам через URL, вы можете использовать cURL
для скачивания больших файлов. Это решение удобно, если ваша исходная система и целевая система располагают доступом к интернету.
- Команда
cURL
:
В терминале переходим в нужный каталог и выполняем команду:curl -O https://example.com/path/to/largefile.mp4
Опция
-O
позволяет сохранить файл с тем же именем, что и на сервере. Если вы хотите изменить имя, используйте-o
:curl -o newfilename.mp4 https://example.com/path/to/largefile.mp4
Заключение
Копирование больших файлов по сети может быть выполнено несколькими способами, и выбор метода зависит от конкретных условий:
rsync
предлагает эффективный и надежный способ управления копированием с учетом восстановлений и метаданных.- Использование
tar
для архивирования позволяет упростить работу с несколькими файлами. cURL
становится идеальным решением, когда требуется загружать файлы по URL.
Выбор подходящего инструмента поможет вам оптимизировать процесс передачи данных и снизить затраты времени и ресурсов.