Hallo Leute,
in diesem Beitrag möchte ich ein Bash-Skript vorstellen, welches automatisch die info.vdr-Dateien im Aufnahmeverzeichnis oder in DVD-Images ausliest und daraus eine CSV-Tabelle mit den Spalten: Titel, Kurztext, Datum, Zeit, Dauer, Kanalname, Beschreibung, Channel-ID, Event-ID, Technische Details erstellt.
Das Skript könnte automatisch nach dem Beenden einer Aufnahme aufgerufen werden (Stichwort: /etc/vdr/recording-hooks).
Die Skript soll die Kreativität anregen und ist keinesfalls perfekt. Es gibt sicher auch andere Möglichkeiten, vor allem in Perl.
Bash
#!/bin/bash
# erstelle_filmdatenbank.sh / Version 0.3 / 25.02.2009
# Dieses Skript liest die info.vdr-Dateien im Aufnahmeverzeichnis oder in
# DVD-Images und erstellt damit eine CSV-Tabelle mit den Spalten: Titel,
# Kurztext, Datum, Zeit, Dauer, Kanalname, Beschreibung, Channel-ID,
# Event-ID, Technische Details.
ISODIR="/video/isos" # Verzeichnis für die DVD-Images (vom VDR-Plugin "burn" generiert)
RECDIR="/video/records" # Aufnahmeverzeichnis
TMPDIR="/tmp/tmpiso/" # Temporäres Verzeichnis für das Mounten der DVD-Images
DATENBANKDATEI="/video/aufnahmen.csv" # Datenbankdatei
#======================================================================
DATENBANKDATEITMP="${DATENBANKDATEI}.tmp"
function get_recinfo {
if [ ! "$1" = "" ] && [ -f "$1" ]; then
cat "$1" | (
while read line; do
ID=$(echo "$line"|head -c1);
case "$ID" in
C) CHANNELID=$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g);
NID=$(echo $CHANNELID|cut -f2 -d"-")
TID=$(echo $CHANNELID|cut -f3 -d"-")
SID=$(echo $CHANNELID|cut -f4 -d"-")
RID=$(echo $CHANNELID|cut -f5 -d"-")
#echo ":$SID:$NID:$TID:$RID"
CHANNELNAME=$(cat /etc/vdr/channels.conf|grep ":$SID:$NID:$TID:$RID"| tr ":" ";"|tr "," ";" |cut -f1 -d";"|sed s/" - "/"-"/|cut -f1 -d"-")
;;
E) EVENTID=$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g);
DATUM=$(echo $EVENTID | cut -f2 -d" " | perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(<STDIN>); $year += 1900; $mon++; printf "%02d.%02d.%04d", $mday,$mon,$year;');
ZEIT=$(echo $EVENTID | cut -f2 -d" " | perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(<STDIN>); $year += 1900; $mon++; printf "%02d:%02d:%02d", $hour,$min, $sec;');
DAUER=$(echo $EVENTID | cut -f3 -d" " | perl -e '$gesmin= <STDIN> / (60); $hour=$gesmin/60; $min=$gesmin % 60; printf "%02d:%02d",$hour,$min');
;;
T) TITLE="$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g)";
;;
S) SHORTTEXT="$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g)";
;;
D) DESCRIPTION="$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g)";
;;
X) TECHNICALDETAILS="$(echo "$line"| sed s/"$ID "// | sed s/\;/\,/g)";
;;
esac;
done;
#echo $CHANNELNAME
echo "$TITLE;$SHORTTEXT;$DATUM;$ZEIT;$DAUER;$CHANNELNAME;${DESCRIPTION};$CHANNELID;$EVENTID;$TECHNICALDETAILS;"
)
else
echo "Datei \"$1\" existiert nicht."
fi
}
function get_isoinfo {
if [ ! "$1" = "" ] && [ -f "$1" ]; then
mkdir $TMPDIR 2> /dev/null
#echo "$i"
sudo mount -t iso9660 -o ro,loop=/dev/loop0 "$1" "$TMPDIR"
find $TMPDIR -name "info*.vdr" | while read i; do
get_recinfo "$i"
done
sudo umount $TMPDIR
rmdir $TMPDIR
else
echo "Datei \"$1\" existiert nicht."
fi
}
echo
echo -n "Bearbeite Verzeichnis: ${RECDIR} "
find "$RECDIR" -name "info*.vdr" | while read i; do
echo -n ".";
get_recinfo "$i" >> ${DATENBANKDATEITMP};
done
echo ""
echo -n "Bearbeite Verzeichnis: ${ISODIR} "
find "$ISODIR" -name "*.iso" | while read i; do
echo -n ".";
get_isoinfo "$i" >> ${DATENBANKDATEITMP};
done
echo ""
if [ -f "${DATENBANKDATEI}" ]; then
cat ${DATENBANKDATEI} >> ${DATENBANKDATEITMP}
fi
cat ${DATENBANKDATEITMP} | sort | uniq > ${DATENBANKDATEI}
rm ${DATENBANKDATEITMP}
Alles anzeigen
Gruß
Steffen