Mam następujący kod jako część skryptu powłoki:
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
Monitoruje to cp
wykonując następującą operację:
cp -a "$ISOMOUNTPOINT"/* "$DEVICEMOUNTPOINT"
I to działa w większości dobrze, dopóki
90.5% copied...
94.2% copied...
97.8% copied...
101.6% copied...
102.7% copied...
Dlaczego przekracza to 100% wielkości źródła? Kopia pochodzi z zamontowanego w pętli ISO na partycji sformatowanej w systemie NTFS na dysku flash USB. Zgaduję, że to prawdopodobnie kwestia systemu plików?
Czego brakuje w moim przykładzie, aby dopasować rozmiary, aby po cp
zakończeniu został w 100% skopiowany, a nie 103%?
Dzięki.
Re: Bounty
Przyznam nagrodę pierwszej osobie, która opracuje rozwiązanie podobne do powyższego kodu, które spełnia następujące kryteria:
- Skrypt musi być w stanie wykryć kopiowanie w stosunku 1: 1
- Skrypt nie może wyświetlać wartości przekraczającej 100% skopiowanej, jednak ...
- Skrypt nie może po prostu ograniczać wyświetlania w 100% skopiowanym, gdy go przekroczy.
Jeśli rozmiar danych jest rzeczywiście różnią się od źródła do miejsca przeznaczenia, dla jakiegoś powodu, to chciałbym skrypt, który zauważa to i nadal wyświetla rzeczywisty stosunek kopiowane.