Vdrsplit
Aus VDR Wiki
Version vom 9. April 2007, 22:39 Uhr von Wilderigel (Diskussion | Beiträge)
Beschreibung
Autor: Hardy Flor
Dieses Script ist zur sicheren Übertragung der großen Aufnahmedateien 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 (Aufnahme) 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