🐧 Копирование файлов на Linux с помощью строки прогресса

Прогресс выполнения при копировании

by itisgood

В отличие от графического режима, при выполнении команды cp вы не видите состояния выполняемого копирования файла.

Если это огромный файл, то терминал просто ждет, пока команда cp завершится.

В команде cp нет опции для отображения хода копирования, но это не означает, что это невозможно сделать вообще.

Вы можете воспользоваться специальным CLI-инструментом progress и посмотреть ход выполнения команды cp:

cp bigfile destination & progress -mp $!

Для отображения прогресса при передаче файлов можно также использовать команду rsync:

rsync -r --progress source_file destination_file

Ранее мы рассматривали этот инструмент с rsync:

Сначала поговорим о первом способе.

Использование cp с progress

Сначала необходимо установить progress. Для этого используйте менеджер пакетов вашего дистрибутива. В Ubuntu и Debian можно воспользоваться командой sudo apt install progress

Команда progress представляет собой средство просмотра прогресса Coreutils.

Она ищет запущенные в данный момент команды coreutils, такие как cp, mv, dd, tar и т.д., и отображает процент скопированных данных.

Это поведение по умолчанию.

Как запустить команду на определенное время в Linux

Например, я создал очень большой файл размером 20 ГБ и запустил команду cp для его копирования в другое место.

Если я введу progress (в другом терминале), то будет показан прогресс всех активных команд Coreutil в этот момент.

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

Не волнуйтесь!

Команда progress имеет несколько опций, и вы можете комбинировать некоторые из них, используя ее подобно тому, как вы комбинируете команды watch и free.

Чтобы показать ход передачи файла командой cp, используйте ее вместе с командой progress следующим образом:

cp bigfile destination & progress -mp $!

Здесь,

  • Опция -m предназначена для мониторинга в цикле до тех пор, пока выполняется контролируемый процесс.
  • Опция -p требует PID процесса, который вы хотите контролировать. Поэтому мы используем специальную переменную $!, которая дает вам идентификатор процесса последней фоновой команды.

Да, вы использовали & для отправки команды cp в фоновом режиме, а затем получили идентификатор процесса с помощью $! и использовали его для мониторинга с помощью команды progress.

Использование rsync для отображения прогресса копирования файлов

Универсальная команда rsync также может быть использована для копирования файлов с отображением прогресса с помощью флага –progress:

rsync -r --progress source_file destination_file

Заключение

Я предпочитаю использовать команду cp для локального копирования файлов и rsync для передачи файлов между удаленными системами.

Мне редко требуется видеть ход копирования в командной строке.

Но приятно знать, что существуют опции, которые могут помочь в решении этой задачи.

Сообщите мне, если у вас есть вопросы или предложения.

You may also like

Leave a Comment