Aus einer Datei eine Zeile finden und mit dem text einen neuen Ordner anlegen Ordnernamen ändern
Hallo zusammen
Da ich nicht besonders gut mit der shell zurecht komme hoffe ich auf eure Unterstützung.
Die datei/en haben unterschiedliche Namen (info.vdr oder info.txt) die durchsucht werden sollen.
Gesucht wird die Zeile mit dem "S" am Anfang.
Aus dem Text soll (ohne das S) dann ein neuer Ordner erstellt werden.
Starten soll das sript unter ("(R)Ubuntu 10.04.3 LTS")
Geht das mit dem Befehl "grep"?
Wenn Ja wie lautet der
Oder sollte man einen anderen Befehl nutzen?
mit freundlichem Gruß
Jamesb10
Da ich nicht besonders gut mit der shell zurecht komme hoffe ich auf eure Unterstützung.
Die datei/en haben unterschiedliche Namen (info.vdr oder info.txt) die durchsucht werden sollen.
Gesucht wird die Zeile mit dem "S" am Anfang.
Aus dem Text soll (ohne das S) dann ein neuer Ordner erstellt werden.
Starten soll das sript unter ("(R)Ubuntu 10.04.3 LTS")
Geht das mit dem Befehl "grep"?
Wenn Ja wie lautet der
Oder sollte man einen anderen Befehl nutzen?
mit freundlichem Gruß
Jamesb10
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 236559
Url: https://administrator.de/forum/aus-einer-datei-eine-zeile-finden-und-mit-dem-text-einen-neuen-ordner-anlegen-ordnernamen-aendern-236559.html
Ausgedruckt am: 18.05.2025 um 21:05 Uhr
14 Kommentare
Neuester Kommentar
Hallo Jamesb10,
könnte so aussehen:
Das Script durchsucht einen Ordner und dessen Unterordner nach Dateien mit den Namen info.txt und info.vdr und extrahiert deinen gewünschte String und erstellt dann damit einen neuen Ordner in dem Verzeichnis in dem sich das jeweilige File befindet (lässt sich aber problemlos ändern). Den Ordner ab dem die Dateien gesucht werden gibst du in Zeile 2 des Scripts an.
Grüße Uwe
könnte so aussehen:
Das Script durchsucht einen Ordner und dessen Unterordner nach Dateien mit den Namen info.txt und info.vdr und extrahiert deinen gewünschte String und erstellt dann damit einen neuen Ordner in dem Verzeichnis in dem sich das jeweilige File befindet (lässt sich aber problemlos ändern). Den Ordner ab dem die Dateien gesucht werden gibst du in Zeile 2 des Scripts an.
#!/bin/bash
folder="/Filme/"
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
files=$(find "$folder" -type f -name 'info.txt' -or -name 'info.vdr')
for f in $files
do
# Ordner des Files
folderOfFile=${f%/*}
# Zeile auslesen
line=$(cat "$f" | grep -Po '^S\s.+' | sed -re 's/[^A-Za-z0-9._-\s]/_/g')
if [ "$line" != "" ]; then
# Pfad für neuen Ordner zusammensetzen
newfolder="$folderOfFile/${line:2}"
# Ordner erstellen wenn er nicht existiert
if [ ! -d "$newfolder" ]; then
echo "Erstelle neuen Ordner: $newfolder"
mkdir "$newfolder"
else
echo "Ordner: '$newfolder' existiert schon."
fi
else
echo "Im File '$f' wurde dein String nicht gefunden"
fi
done
IFS=$SAVEIFS
benennt den jeweiligen Ordner um ...
Grüße Uwe
#!/bin/bash
folder="/$1/"
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
files=$(find "$folder" -type f -name 'info.txt' -or -name 'info.vdr')
for f in $files
do
# Ordner des Files
folderEpisode=${f%/*/*}
# parent Folder
parentOfExpisode=${folderEpisode%/*}
# Zeile auslesen
line=$(cat "$f" | grep -Po '^S\s.+' | sed -e 's/[^A-Za-z0-9._-]/_/g')
# wenn Name nicht leer
if [ "$line" != "" ]; then
# neuer Ordnernamen
# überprüfen ob ein Prozentzeichen am Anfang des Ordnernamens vorkommt
oldname=${folderepisode##*/}
if [[ "${oldname:0:1}" == "%" ]]; then
newFolder="$parentOfExpisode/%${line:2}"
else
newFolder="$parentOfExpisode/${line:2}"
fi
# wenn Ordner noch nicht existiert dann erstelle ihn
if [ ! -d "$newFolder" ]; then
echo "Benenne Ordner '$folderEpisode' um in '$newFolder'"
mv "$folderEpisode" "$newFolder"
else
echo "Ordnername '$newFolder' existiert schon."
fi
else
echo "Im File '$f' wurde dein String nicht gefunden"
fi
done
IFS=$SAVEIFS
keine Ursache 
Grüße Uwe
Zitat von @Jamesb10:
Muss jetzt nur noch den "refresh" Befehl für den Linux-vdr finden, um die Ordnerstruktur zu Aktualisieren. Melde
mich dann nochmal wenn ich ihn hab.
war das nicht:Muss jetzt nur noch den "refresh" Befehl für den Linux-vdr finden, um die Ordnerstruktur zu Aktualisieren. Melde
mich dann nochmal wenn ich ihn hab.
/usr/bin/touch /var/lib/video/.update
Zitat von @Jamesb10:
Aber wie es so ist, merkt man erst beim arbeiten damit das ein paar "Fehler" vorhanden sind.
eher Konstellationen die ich hier nicht vorhersehen kann Aber wie es so ist, merkt man erst beim arbeiten damit das ein paar "Fehler" vorhanden sind.
Windows kommt mit dem "Doppelpunkt" im Ordnernamen nicht zurecht, den VDR stört das nicht.
Also wäre es schön wenn der "Doppelpunkt" nicht mit übernommen wird.
Dies hatte ich bereits berücksichtigt, es werden nur Buchstaben, Zahlen und diese Zeichen übernommen "Punkt, Unterstrich und Bindestrich". Siehe Zeile 15. Klappt hier auch einwandfrei.Also wäre es schön wenn der "Doppelpunkt" nicht mit übernommen wird.
Die leerzeichen zwischen den Wörter und Zahlen behindert dummerweise ein anderes script, eine fehlermeldung kommt dann "Ordner kann nicht geöffnet werden".
Auf deinen Wunsch hin werden nun auch Leerzeichen durch einen Unterstrich ersetzt.Es sind auch Aufnahmen schon geschnitten worden, somit hat das Verzeichniss ein "%" Zeichen am anfang
Das Prozent zeichen sorgt im VDR dafür das ein scherensymbol vor der Aufnahme angezeigt wird,
somit erkennt man sofort welche aufnahme geschnitten wurde und welche nicht.
Ist es möglich das, das script das Prozentzeichen von dem alten Namen übernimmt?
Ist jetzt auch mit eingebaut (s. letztes Script oben).Das Prozent zeichen sorgt im VDR dafür das ein scherensymbol vor der Aufnahme angezeigt wird,
somit erkennt man sofort welche aufnahme geschnitten wurde und welche nicht.
Ist es möglich das, das script das Prozentzeichen von dem alten Namen übernimmt?
Und zu guter letzt gibt es leider noch diese Situation:
Also dummerweise "Zwei" aufnahmen in einem Ordner.
Vielleicht kann man das lösen, aber es würde ausreichen wenn eine Rückmeldung (echo) ansagt z.B.
mach ich später noch, muss jetzt leider weg.Also dummerweise "Zwei" aufnahmen in einem Ordner.
Vielleicht kann man das lösen, aber es würde ausreichen wenn eine Rückmeldung (echo) ansagt z.B.
Oder sehe den letzten Punkt vielleicht mal als Hausaufgabe, damit du auch mal selber Hand anlegen kannst, sonst lernst du es nie, wenn ich dir hier immer alles vorbeete
Grüße Uwe