У меня есть следующий код как часть сценария оболочки:
while [ $(ps -ef | awk '{print $2}' | grep -F "$CPPID") ]; do
sleep 10
awk -v "usbsize=$(/bin/df | grep -F $DEVICEMOUNTPOINTQ | awk '{print $3}')" -v "isosize=$(/bin/df | grep -F $ISOMOUNTPOINTQ | awk '{print $3}')" 'BEGIN { printf "%.1f", 100 * usbsize / isosize }' && echo "% copied..."
done
Это мониторинг, cp
выполняющий следующую операцию:
cp -a "$ISOMOUNTPOINT"/* "$DEVICEMOUNTPOINT"
И это работает нормально по большей части, пока
90.5% copied...
94.2% copied...
97.8% copied...
101.6% copied...
102.7% copied...
Почему это превышает 100% размера источника? Копия с ISO-образа, смонтированного в петлю, на раздел в формате NTFS на флэш-накопителе USB. Я предполагаю, что это, вероятно, вещь файловой системы?
Чего не хватает в моем примере, чтобы размеры соответствовали друг другу, чтобы при cp
завершении он копировался на 100%, а не на 103%?
Благодарю.
Re: Баунти
Я назначу вознаграждение первому лицу, предложившему решение, аналогичное приведенному выше коду, которое соответствует следующим критериям:
- Скрипт должен быть в состоянии обнаружить копирование в соотношении 1: 1
- Скрипт не должен отображать значение, превышающее 100%, однако ...
- Сценарий не должен просто ограничивать отображение на 100%, когда оно превышает его.
Если размер данных делает на самом деле отличается от источника к месту назначения по какой - то причине, то я хотел бы сценарий , который замечает это и по- прежнему отображает реальное соотношение скопированы.