В отличие от графического режима, при выполнении команды cp вы не видите состояния выполняемого копирования файла.
Если это огромный файл, то терминал просто ждет, пока команда cp завершится.
В команде cp нет опции для отображения хода копирования, но это не означает, что это невозможно сделать вообще.
Вы можете воспользоваться специальным CLI-инструментом progress и посмотреть ход выполнения команды cp:
cp bigfile destination & progress -mp $!
Для отображения прогресса при передаче файлов можно также использовать команду rsync:
rsync -r --progress source_file destination_file
Ранее мы рассматривали этот инструмент с rsync:
- 📁 Как показать прогресс передачи файлов с помощью Rsync
- 🐧 Альтернативы команды cp на Linux для демонстрации прогресса и скорости
- 📜 Добавление цветов в скрипты Bash
Сначала поговорим о первом способе.
Использование 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 для передачи файлов между удаленными системами.
Мне редко требуется видеть ход копирования в командной строке.
Но приятно знать, что существуют опции, которые могут помочь в решении этой задачи.
Сообщите мне, если у вас есть вопросы или предложения.