Vdrsplit

Aus VDR Wiki
Wechseln zu: Navigation, Suche

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.

Datei
vdrsplit
#!/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