jamesb10
Goto Top

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")

c6741fd6ec34fa8f6619de32500ed352

Geht das mit dem Befehl "grep"?
Wenn Ja wie lautet der
Oder sollte man einen anderen Befehl nutzen?

mit freundlichem Gruß

Jamesb10

Content-Key: 236559

Url: https://administrator.de/contentid/236559

Printed on: April 25, 2024 at 15:04 o'clock

Member: rubberman
rubberman Apr 27, 2014 updated at 10:07:15 (UTC)
Goto Top
Hallo Jamesb10.

Ich bin überhaupt nicht mit der *NIX Welt vertraut, aber grep gibt es auch für Windows. Somit kann ich dir hoffentlich wenigstens mit dem Regex Pattern helfen.
grep -P "(?<=^S\s).+(?=$)" -o info.vdr  
Grüße
rubberman
Member: Jamesb10
Jamesb10 Apr 27, 2014 at 10:35:17 (UTC)
Goto Top
Hallo rubberman

Der Befehl funktioniert,
Danke
Wenn jetzt aber mal eine "info.vdr" oder "info.txt" datei vorhanden ist,
kann man den Befehl erweitern oder muß das anders gelöst werden?

Grüße
Jamesb10
Member: colinardo
colinardo Apr 27, 2014, updated at Apr 29, 2014 at 16:55:13 (UTC)
Goto Top
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.
#!/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
Grüße Uwe
Member: Jamesb10
Jamesb10 Apr 27, 2014 at 12:02:25 (UTC)
Goto Top
Hallo colinardo

WAU!!!!
Mit so einer schnellen Hilfe hab ich nicht gerechnet.

Das script funktionert sssuuuper!!!!

Werde in den nächsten Tagen mir mal gedanken machen wie es weitergeht, und Erklären warum ich ein script benötige.

Nochmal´s Danke

Gruß

Jamesb10
Member: Jamesb10
Jamesb10 Apr 28, 2014 updated at 16:51:29 (UTC)
Goto Top
Hallo

Das script soll mir helfen beim Sortieren meiner Serien Aufnahmen.
Vor dem Fernseher im Linux vdr ist das einfach. (siehe Bild)

710bcc11009d983a75bbf27705a51bf2

Aber vom PC aus die Episoden anzugleichen ist umständlich.
Bis zur info-datei durchklicken - Öffnen - Zeile "S" kopieren - zurückklicken zum "Episoden Ordner - Ordnernamen ändern - speichern.

6cf453d9f72be3466b658bd7ca41669a

Nach erstellen des "Neuen Ordner´s" soll der Inhalt des alten Ordner verschoben werden, in den neuen.

Oder kann man den vorhandenen Ordner einen neuen Namen geben?

Den ordner Pfad zu der markierten Aufnahme bekomme ich von dem VDR

#!/bin/bash
folder="/$1/"  
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

Wie würde jetzt das script weitergehen? Was wäre Sinnvoller?

mfg Jamesb10
Member: colinardo
colinardo Apr 28, 2014, updated at Jun 21, 2014 at 09:12:30 (UTC)
Goto Top
benennt den jeweiligen Ordner um ...
#!/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
Grüße Uwe
Member: Jamesb10
Jamesb10 Apr 29, 2014 at 15:46:09 (UTC)
Goto Top
Hallo colinardo

Dein script funktioniert.face-smile face-smile
Da ich aber leider nicht klar genug angesagt habe welcher Ordnername verändert werden soll,
hat das script den falschen Ordner verändert.

vor der Änderung

Castle
---Mon_17.02.2014-16#3A51
2014-03-28.11.11.8-0.rec
00001.ts
00002.ts
00003.ts
index
info.txt
preview_vdr.png

nach der Änderung

Castle
---Mon_17.02.2014-16#3A51
3.16 Die schmutzige Bombe
00001.ts
00002.ts
00003.ts
index
info.txt
preview_vdr.png

geändert werden soll aber dieser Ordner. Er befindet sich noch eine ebene höher

Castle
3.16 Die schmutzige Bombe
2014-03-28.11.11.8-0.rec
00001.ts
00002.ts
00003.ts
index
info.txt
preview_vdr.png

Ich hoffe das,das auch machbar ist.

Mit freundlichem Gruß

Jamesb10
Member: colinardo
colinardo Apr 29, 2014 updated at 16:56:17 (UTC)
Goto Top
ist oben aktualisiert und noch eine Korrektur wegen Leerzeichen in Pfaden vorgenommen.

Grüße Uwe
Member: Jamesb10
Jamesb10 Apr 30, 2014 at 06:17:03 (UTC)
Goto Top
Hallo

face-smile face-smile Superface-smile face-smile+++++++

+++face-smile face-smile Spitzeface-smile face-smile++++

face-smile face-smile Coolface-smile face-smile++

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.

Vielen,vielen Dank für deine Hilfe!!!!!face-smile face-smile face-smile face-smile
Member: colinardo
colinardo Apr 30, 2014 updated at 06:37:24 (UTC)
Goto Top
keine Ursache face-smile
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:
 /usr/bin/touch /var/lib/video/.update
Grüße Uwe
Member: Jamesb10
Jamesb10 May 01, 2014 at 06:27:06 (UTC)
Goto Top
Hallo
und schönen ersten Mai

Zitat von @colinardo:
war das nicht:
/usr/bin/touch /var/lib/video/.update

Nicht ganz
touch /media/reel/recordings/.update

diesen Befehl jetzt aber in´s script zu integrieren, was ich anfänglich dedacht hatte, ist nicht sinnvoll.
Hab jetzt einen menu-punkt erstellt den ich anwähle, wenn ich einen Serien-Ordner abgearbeitet habe.

Wegen der Optik des Echo´s (muss nicht sein) ist die ausgabe zu lang.
Sinnvoll wäre die Anzeige Serie/"alter Ordnername" nach "Neuer Ordnername"

Du glaubst nicht was du mir für eine Tippereien auf der PC Tastatur erspart hast:

Mein Nas :
1 TB-jfs
1,5 TB-fat32
1 TB-ext2
2 TB-ntfs
VDR-1:
1 TB-jfs
VDR-2:
2 TB-jfs
8,5 TB Speicherkapazität

Also, nochmal Vielen Vielen Dank

mit freundlichen Grüßen

Jamesb10
Member: Jamesb10
Jamesb10 Jun 21, 2014 updated at 08:50:13 (UTC)
Goto Top
Hallo colinardo

Dein script funktioniert!!!

Aber wie es so ist, merkt man erst beim arbeiten damit das ein paar "Fehler" vorhanden sind.

Der neue Ordnername der aus der Zeile der info.txt datei genommen wird sieht jetzt so aus:

C C-133-4-27 RTL Crime
E 4297 1391714100 2700 4E 4
T Arrow
S 1.05: Der Doppelgänger
D USA 2012. 45 Min. Von Michael Schultz, mit Stephen Amell, Colin Donnell, Katie Cassidy.

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.

Die leerzeichen zwischen den Wörter und Zahlen behindert dummerweise ein anderes script, eine fehlermeldung
kommt dann "Ordner kann nicht geöffnet werden".

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?

Arrow
%Arrow
2014-02-06.20.59.91-0.rec
00001.ts
index
info.txt

Und zu guter letzt gibt es leider noch diese Situation:

Criminal_Minds
Criminal_Minds
2014-02-06.22.11.4-0.rec
00001.ts
index
info.txt
2014-05-25.16.51.154-0.rec
00001.ts
index
info.txt

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.

"Zwei Aufnahmen im Verzeichnis", dann würde ich die von Hand trennen.

Ich hoffe das du diese kleinen "Fehler" beheben kannst,
sollte es nicht funktionieren ist das kein Beinbruch.
Hab bis jetzt ca. 30% meiner Aufnahmen schon durch, gehe halt nach Ordnername ändern von Hand hinterher

find /media/reel/recordings -follow -name "* *" -type d | rename 's/ /_/g'  

find /media/reel/recordings -follow -name "*:*" -type d | rename 's/://g'  

ps. diese Befehle hab ich als Hilfestellung bekommen

Mit Freundlichem Gruss

Jamesb-10
Member: colinardo
colinardo Jun 21, 2014 updated at 13:41:07 (UTC)
Goto Top
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 face-smile
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.
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).
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.

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 face-smile

Grüße Uwe
Member: Jamesb10
Jamesb10 Jun 24, 2014 at 07:45:55 (UTC)
Goto Top
Hallo colinardo

SORRY!!!! für den Mist den ich oben verfasst habe.
Hab momentan nicht viel Zeit,
BITTE!!! nichts am script machen, ist nicht sinnvoll!!!
Melde mich in ca. 1 Woche wieder

Gruss Jamesb10