Vdrsplit
Aus VDR Wiki
(Unterschied zwischen Versionen)
HFlor (Diskussion | Beiträge) (Neuer Beitrag) |
Version vom 29. Juni 2006, 14:03 Uhr
Beschreibung
Autor: Hardy Flor
Dieses Script ist zur sicheren Übertragung der großen Aufnamedateien durch die Trennung in mehrere kleine Teile gedacht.
Voraussetzungen
Es werden die folgende Programme benötigt:
* md5sum * split
Funktion
Es wird in dem aktuellen bzw. als Parameter angegebenen Verzeichniss (Aufname) nach der 001.vdr gesucht.
Dann wird die Prüfsumme über alle in diesem Verzeichniss vorhandenen Dateien gebildet.
Nun erfolgt die Aufteilung in Stücke von Standardmäßig 50MB.
Abschließend erfolgt auch eine Prüfsumme dieser Teile und die Erstellung einen Zusammenfassungsscript.
Die Dateien 002.vdr ... werden ebenfalls berücksichtigt.
#!/bin/bash
size="50" # Größe in MBytes min. 3
script="zusammen$size.sh"
if [ -d $1 ]; then
cd $1
fi
if [ -r 001.vdr ]; then
echo "Prüfsummenerstellung ... (1)"
find . -maxdepth 1 -type f -exec md5sum -b {} \; -o -maxdepth 1 -type l -exec
md5sum -b {} \; | grep -v md5sum | tee md5sum
echo "#!/bin/bash" >$script
echo "" >>$script
if [ ! -d split_${size}M ]; then
mkdir split_${size}M
fi
count=$(ls ???.vdr 2>/dev/null | wc -l)
current=0
for file in `ls ???.vdr`
do
let "current++"
splitcount=$(du -L -B ${size}M $file | cut -f1)
echo "Teile $file ($current/$count) $splitcount Teile"
split --verbose -a 3 -b ${size}m -d $file split_${size}M/$file.
echo "files[$current]=\"$file\"" >>$script
done
cat - >>$script <<EOF
if [ -r \${files[1]}.000 ]; then
dir=""
else
dir="split_${size}M/"
fi
if [ -r \$dir\${files[1]}.000 ]; then
count=\${#files[@]}
for (( loopvar = 1; loopvar <= \$count; loopvar++ )); do
echo "Erstelle \${files[\$loopvar]} (\$loopvar/\$count)"
cat \$dir\${files[\$loopvar]}.* >\${files[\$loopvar]}
done
echo "Überprüfe \$count Datei(en)"
if [ \$(ls ???.vdr 2>/dev/null | wc -l) -eq \$count ]; then
md5sum -c <md5sum
if [ \$? -eq 0 ]; then
echo "Prüfsumme(n) fehlerfrei"
for (( loopvar = 1; loopvar <= \$count; loopvar++ )); do
rm \$dir\${files[\$loopvar]}.*
done
if [ ! -z "\$dir" ]; then
rmdir --ignore-fail-on-non-empty \$dir
fi
else
echo "Fehler bei Prüfsumme, bitte folgende Teile überprüfen:"
if [ -z "\$dir" ]; then
md5sum -c <md5sum.${size}M
else
cd \$dir
md5sum -c <../md5sum.${size}M
cd ..
fi
fi
else
echo "Anzahl der ???.vdr-Dateien ist fehlerhaft! Soll=\$count"
fi
else
echo "Bitte im Verzeichniss der geladenen Teile starten!"
fi
EOF
chmod ug+x $script
echo "Prüfsummenerstellung ...(2)"
cd split_${size}M
find . -type f -exec md5sum -b {} \; | tee ../md5sum.${size}M
cd ..
else
echo "Bitte im Verzeichniss mit 001.vdr starten!"
fi