Прогресс md5sum при передаче по конвейеру

Я сравниваю два USB-устройства после rsync с md5sum / usb1 / * / usb2 / * | sort так, чтобы для всех файлов, находящихся в корне дисков, были вычислены их суммы md5, затем вывод сортируется по md5sum. Вся команда расширяется, например, до md5sum / usb1 / bigfile1 / usb1 / bigfile2 / usb2 / bigfile1 / usb2 / bigfile2 . Из-за нетерпения я задаюсь вопросом, каков прогресс, то есть над каким файлом он работает прямо сейчас? Поскольку он передан в другую команду, у меня нет stdout или stderr, чтобы увидеть, какой файл хэшируется atm. Есть ли какая-то команда, чтобы сообщить о том, что делает другая команда прямо сейчас ?

Я помечен здесь как «сигналы», но я мало знаю о сигналах, чтобы было удобно прерывать md5sum процесс с одним. Я помню, что можно было отправить сигнал на dd , чтобы он сообщил о ходе выполнения.

0
09.05.2017, 11:02
2 ответа

Вы можете использовать прогресс для этого:

progress -p $(pgrep md5sum)

или, если вы хотите постоянно контролировать md5sum:

progress -m -p $(pgrep md5sum)

Без использования внешнего инструмента , вы можете увидеть, к каким файлам md5sum в настоящее время обращается в Linux, перечислив /proc/$(pgrep md5sum)/fd, и узнать больше информации об дескрипторах файлов (включая их положение , который показывает, сколько было обработано md5sum), просматривая файлы в /proc/$(pgrep md5sum)/fdinfo.

Как вы упомянули, dd распечатает отчет о проделанной работе, когда получит SIGUSR1, но это функция, реализованная dd, а не общий сигнал- опосредованный признак. По умолчанию отправка SIGUSR1 процессу уничтожит его.

2
28.01.2020, 02:33

Другая команда, которая работает как cat, это pv. Он загружает содержимое файла в стандартный вывод, который вы передаете другой программе (md5sum ), а индикация хода выполнения выводится через стандартный вывод. Хотя это действительно хорошо только для 1 файла за раз. Используйте какpv /usb1/bigfile1 | md5sum

0
28.01.2020, 02:33

Теги

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