Neue Version hier: 1.1b
Hi an alle,
dies ist mein erster Post im "VDR News" Bereich, ich hoffe, dass dieser Beitrag diesem ehrwürdigen Bereich gerecht wird
Ich arbeite bereits seit fast einem Jahr immer mal an diesem Script und glaube nun das es stabil und sicher genug ist, dass andere auch etwas damit anfangen können.
Es löst folgende bei mir vorhandene Problemstellung: Ich wandle meine ganzen VDR-Aufnahmen in mpg oder avi Dateien um, da ich das schon bereits sehr lange mache sammelt sich so einiges an Filmchen
Ich habe alle Filme die ich habe auf mehreren Festplatten verteilt. Das Problem dabei ist dann aber, wie finde ich meine Filmchen wieder? Da fiel mir die Idee für dieses Script ein:
Es schaut in angegebenen Verzeichnissen nach, sucht sich alle Filme und erstellt zu jedem Softlinks nach bestimmten Sortierkriterien.
Mit meiner vorgegebenen Konfiguration legt es die folgenden Verzeichnisse (Die alle nur Softlinks enthalten!) unter einem Zielverzeichnis an:
Alle_Filme
Die_30_neusten_Filme
Name_beginnt_mit
Neu_dazu_gekommen_am
Wobei Filme natürlich öfter vertreten sind! (z.B. The Rock.mpg wird in: Zielverzeichnis/Name_beginnt_mit/S-T/, Zielverzeichnis/Alle_Filme und Zielverzeichnis/Neu_dazu_gekommen_am/2007-03 zu finden sein!)
In "Alle_Filme" sind, ja? genau: Alle Filme
In "Die_30_neusten_Filme" sind die 30 Filme, mit dem jüngsten Datum
Unter "Name_beginnt_mit" existieren nochmal 6 Unterverzeichnisse: 0-C, D-F, G-L etc. Müsste selbsterklärend sein.
Unter "Neu_dazu_gekommen_am" sind auch Unterverzeichnisse, und zwar je nach Datum der Filme: Jahr-Monat, z.B. 2007-12, 2007-11, 2008-01 etc.
Zusätzlich legt das Script noch 2 Filmlisten an, einmal alphabetisch sortiert und einmal nach Datum sortiert, neuste zuerst.
#!/bin/sh
#
# Erzeugt Softlinks zu Filmen, die in verschiedenen (Unter-) Verzeichnissen liegen.
#
# Version 1.0b
# Geschrieben von Tristan Fischer (mail@dersphere.de)
# Jeder kann mit diesem Script machen, was er will. Über Feedback würde ich mich allerdings freuen :)
#
# Konfiguration:
# Hier alle Verzeichnisse angeben wo Filme zu finden sind. Eingeschlossen von Hochkommata und von Leerzeichen getrennt.
Wo_die_Filme_sind='/Storage/Fitzgerald/Filme2 /Storage/Erebos/Filme3 /Storage/Pandorra/Filme1 /Storage/Hugo/Filme5 /Storage/Juno/Filme'
# Hier das Zielverzeichnis für die Softlinks angeben. (Wird erstellt falls nicht vorhanden!)
Zielverzeichnis=/Storage/Virtual/Filme
# Die Dateiendungen für die Filme, von Hochkommata und Klammern umgeben, von Pipes getrennt. Groß/Kleinschreibung wird ignoriert!
Dateiendungen='(mpg|avi|dat|mpeg|divx|iso|bin|nrg)'
# Die Dateinamen von den beiden Text-Filmlisten.
Filmliste_Datum=Filmliste_Datum.txt
Filmliste_Alphabet=Filmliste_A-Z.txt
# Die vier unter Zielverzeichnis zu erzeugenden Verzeichnisse.
NameDesNeueFilmeDirs=Die_30_neusten_Filme
NameDesMonatDirs=Neu_dazu_gekommen_am
NameDesAlphabetischDirs=Name_beginnt_mit
NameDesAlleDirs=Alle_Filme
# Die Anzahl der neusten Filme, die unter NameDesNeueFilmeDirs verlinkt werden sollen.
AnzahlDerNeuenFilme=30
# Ende der Konfiguration:
# Aufraeumen oder Erstellen
if [ -e "$Zielverzeichnis" ]
then
echo "-> Räume auf..."
rm $Zielverzeichnis/$NameDesAlphabetischDirs -rf
rm $Zielverzeichnis/$NameDesMonatDirs -rf
rm $Zielverzeichnis/$NameDesNeueFilmeDirs -rf
rm $Zielverzeichnis/$Filmliste_Datum -rf
rm $Zielverzeichnis/$Filmliste_Alphabet -rf
rm $Zielverzeichnis/$NameDesAlleDirs -rf
else
echo "-> Erstelle Zielverzeichnis..."
mkdir $Zielverzeichnis -p
fi
# Anzahl der gefunden Filme ausgeben
echo "-> `find $Wo_die_Filme_sind -type f |grep -E \.$Dateiendungen -i |wc -l` Filme gefunden..."
# Softlinks lokal erstellen
echo "-> Erstelle Softlinks..."
mkdir $Zielverzeichnis/$NameDesAlleDirs -p
find $Wo_die_Filme_sind -type f -print |grep -E \.$Dateiendungen -i |sed 's#.*/\(.*\)#ln -s "\0" "'$Zielverzeichnis/$NameDesAlleDirs/'\1" #' |/bin/sh
# Softlinks zählen zum Vergleich
echo "-> `ls -L $Zielverzeichnis/$NameDesAlleDirs |grep -E \.$Dateiendungen -i |wc -l` Softlinks erstellt..."
# Filmlisten erstellen und zweites zählen
echo "-> Erstelle Listen..."
ls -Lt $Zielverzeichnis/$NameDesAlleDirs > $Filmliste_Datum
ls -L $Zielverzeichnis/$NameDesAlleDirs > $Filmliste_Alphabet
# Die Softlinks werden in Monatsverzeichnisse kopiert
echo "-> Kopiere Softlinks in Monatsverzeichnisse und erzeuge diese vorher..."
mkdir $Zielverzeichnis/$NameDesMonatDirs -p
ls -lLQ $Zielverzeichnis/$NameDesAlleDirs |cut -b 35-41,51- |sed 's#^\(.......\) \(.*\)#mkdir '$Zielverzeichnis/$NameDesMonatDirs'/\1 -p ;cp -d '$Zielverzeichnis/$NameDesAlleDirs/'\2 '$Zielverzeichnis/$NameDesMonatDirs'\/\1#'|/bin/sh
# Die neusten Filme finden und ins neue_Filme Dir kopieren
echo "-> Kopiere neueste Filme..."
mkdir $Zielverzeichnis/$NameDesNeueFilmeDirs
ls -LtQ $Zielverzeichnis/$NameDesAlleDirs |head -n $AnzahlDerNeuenFilme | sed 's#\(.*\)#cp -d '$Zielverzeichnis/$NameDesAlleDirs/'\1 '$Zielverzeichnis/$NameDesNeueFilmeDirs/'#' |/bin/sh
# Die Verzeichnisse erstellen für Name_beginnt_mit
echo "-> Erstelle Verzeichnisse für Anfangsbuchstaben..."
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/0-C -p
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/D-F -p
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/G-L -p
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/M-R -p
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/S-T -p
mkdir $Zielverzeichnis/$NameDesAlphabetischDirs/U-Z -p
# Das kopieren der Softlinks für Name_beginnt_mit
echo "-> Kopiere Filme für Anfangsbuchstaben..."
cp -d $Zielverzeichnis/$NameDesAlleDirs/[0-9A-Ca-c]* $Zielverzeichnis/$NameDesAlphabetischDirs/0-C
cp -d $Zielverzeichnis/$NameDesAlleDirs/[D-Fd-f]* $Zielverzeichnis/$NameDesAlphabetischDirs/D-F
cp -d $Zielverzeichnis/$NameDesAlleDirs/[G-Lg-l]* $Zielverzeichnis/$NameDesAlphabetischDirs/G-L
cp -d $Zielverzeichnis/$NameDesAlleDirs/[M-Rm-r]* $Zielverzeichnis/$NameDesAlphabetischDirs/M-R
cp -d $Zielverzeichnis/$NameDesAlleDirs/[S-Ts-t]* $Zielverzeichnis/$NameDesAlphabetischDirs/S-T
cp -d $Zielverzeichnis/$NameDesAlleDirs/[U-Zu-z]* $Zielverzeichnis/$NameDesAlphabetischDirs/U-Z
# Ende :)
echo "-> Fertig :)"
Alles anzeigen
Über Feedback würde ich mich freuen
Grüße
sphere
PS. es basiert auf Lösungen aus diesem Thread: klick
EDIT: kleiner Typo korrigiert