Автор: Artix Возникла задача - снять данные с полумертвого диска, который при чтении очень косячил и выдавал разные данные. Для этого был написан скрипт, который читал заданный файл мелкими блоками и проверял каждый блок отдельно. ./bincopy.sh from to #!/bin/bash s=0 bs=1k cnt=1 if [ $# -ne 2 ] then exit fi inp=$1 out=$2 p=`date | md5sum | cut -f1 -d ' '` echo "COPY $inp => $out" if [ -e "$out" ] then rm "$out" fi while (( 1 )) do c0=`dd if=$inp bs=$bs count=$cnt skip=$s status=none | md5sum | cut -f1 -d ' '` dd if=$inp bs=$bs count=$cnt skip=$s status=none > _"$p"_1 dd if=$inp bs=$bs count=$cnt skip=$s status=none > _"$p"_2 if [ -s _"$p"_1 ] && [ -s _"$p"_2 ] then c1=`md5sum _"$p"_1 | cut -f1 -d ' '` c2=`md5sum _"$p"_2 | cut -f1 -d ' '` echo "$c0 : $c1 : $c2" if [ "$c1" == "$c2" ] && [ "$c0" == "$c1" ] then cat _"$p"_1 >> $out else echo "ERROR CYCLE: $s" exit fi else break fi ((s += $cnt)) done if [ -e _"$p"_1 ] then rm _"$p"_1 fi if [ -e _"$p"_2 ] then rm _"$p"_2 fi md5sum $inp md5sum $out #
Bash Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor