Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Aus einer Datei eine Zeile finden und mit dem text einen neuen Ordner anlegen Ordnernamen ändern

Frage Entwicklung Batch & Shell

Mitglied: Jamesb10

Jamesb10 (Level 1) - Jetzt verbinden

27.04.2014, aktualisiert 21.06.2014, 1986 Aufrufe, 14 Kommentare, 4 Danke

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 - Klicke auf das Bild, um es zu vergrößern

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

mit freundlichem Gruß

Jamesb10
Mitglied: rubberman
27.04.2014, aktualisiert um 12:07 Uhr
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.
01.
grep -P "(?<=^S\s).+(?=$)" -o info.vdr
Grüße
rubberman
Bitte warten ..
Mitglied: Jamesb10
27.04.2014 um 12:35 Uhr
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
Bitte warten ..
Mitglied: colinardo
27.04.2014, aktualisiert 29.04.2014
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.
01.
#!/bin/bash 
02.
folder="/Filme/" 
03.
SAVEIFS=$IFS 
04.
IFS=$(echo -en "\n\b") 
05.
files=$(find "$folder" -type f -name 'info.txt' -or -name 'info.vdr') 
06.
for f in $files 
07.
do  
08.
	# Ordner des Files 
09.
	folderOfFile=${f%/*} 
10.
 
11.
	# Zeile auslesen 
12.
	line=$(cat "$f" | grep -Po '^S\s.+' | sed -re 's/[^A-Za-z0-9._-\s]/_/g') 
13.
	if [ "$line" != "" ]; then 
14.
		# Pfad für neuen Ordner zusammensetzen 
15.
		newfolder="$folderOfFile/${line:2}" 
16.
 
17.
		# Ordner erstellen wenn er nicht existiert 
18.
		if [ ! -d "$newfolder" ]; then 
19.
			echo "Erstelle neuen Ordner: $newfolder" 
20.
			mkdir "$newfolder" 
21.
		else 
22.
			echo "Ordner: '$newfolder' existiert schon." 
23.
		fi 
24.
	else 
25.
		echo "Im File '$f' wurde dein String nicht gefunden" 
26.
	fi 
27.
done 
28.
IFS=$SAVEIFS
Grüße Uwe
Bitte warten ..
Mitglied: Jamesb10
27.04.2014 um 14:02 Uhr
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
Bitte warten ..
Mitglied: Jamesb10
28.04.2014, aktualisiert um 18:51 Uhr
Hallo

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

710bcc11009d983a75bbf27705a51bf2 - Klicke auf das Bild, um es zu vergrößern

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 - Klicke auf das Bild, um es zu vergrößern

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

01.
#!/bin/bash 
02.
folder="/$1/" 
03.
files=$(find "$folder" -type f -name 'info.txt' -or -name 'info.vdr') 
04.
for f in $files 
05.
do  
06.
	# Ordner des Files 
07.
	folderOfFile=${f%/*} 
08.
 
09.
	# Zeile auslesen 
10.
	line=$(cat "$f" | grep -Po '^S\s.+' | sed -re 's/[^A-Za-z0-9._-\s]/_/g') 
11.
	if [ "$line" != "" ]; then 
12.
		# Pfad für neuen Ordner zusammensetzen 
13.
		newfolder="$folderOfFile/${line:2}" 
14.
 
15.
		# Ordner erstellen wenn er nicht existiert 
16.
		if [ ! -d "$newfolder" ]; then 
17.
			echo "Erstelle neuen Ordner: $newfolder" 
18.
			mkdir "$newfolder" 
19.
		else 
20.
			echo "Ordner: '$newfolder' existiert schon." 
21.
		fi 
22.
	else 
23.
		echo "Im File '$f' wurde dein String nicht gefunden" 
24.
	fi 
25.
done
Wie würde jetzt das script weitergehen? Was wäre Sinnvoller?

mfg Jamesb10
Bitte warten ..
Mitglied: colinardo
28.04.2014, aktualisiert 21.06.2014
benennt den jeweiligen Ordner um ...
01.
#!/bin/bash 
02.
folder="/$1/" 
03.
SAVEIFS=$IFS 
04.
IFS=$(echo -en "\n\b") 
05.
 
06.
files=$(find "$folder" -type f -name 'info.txt' -or -name 'info.vdr') 
07.
for f in $files 
08.
do  
09.
	# Ordner des Files 
10.
	folderEpisode=${f%/*/*} 
11.
    # parent Folder 
12.
	parentOfExpisode=${folderEpisode%/*} 
13.
 
14.
	# Zeile auslesen 
15.
	line=$(cat "$f" | grep -Po '^S\s.+' | sed -e 's/[^A-Za-z0-9._-]/_/g') 
16.
 
17.
	# wenn Name nicht leer 
18.
	if [ "$line" != "" ]; then 
19.
		# neuer Ordnernamen 
20.
                # überprüfen ob ein Prozentzeichen am Anfang des Ordnernamens vorkommt 
21.
                oldname=${folderepisode##*/} 
22.
                if  [[ "${oldname:0:1}" == "%" ]]; then 
23.
		        newFolder="$parentOfExpisode/%${line:2}" 
24.
                else 
25.
		        newFolder="$parentOfExpisode/${line:2}" 
26.
                fi 
27.
		# wenn Ordner noch nicht existiert dann erstelle ihn 
28.
		if [ ! -d "$newFolder" ]; then 
29.
			echo "Benenne Ordner '$folderEpisode' um in '$newFolder'" 
30.
			mv "$folderEpisode" "$newFolder" 
31.
		else 
32.
			echo "Ordnername '$newFolder' existiert schon." 
33.
		fi 
34.
 
35.
	else 
36.
		echo "Im File '$f' wurde dein String nicht gefunden" 
37.
	fi 
38.
	 
39.
done 
40.
IFS=$SAVEIFS
Grüße Uwe
Bitte warten ..
Mitglied: Jamesb10
29.04.2014 um 17:46 Uhr
Hallo colinardo

Dein script funktioniert.
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
Bitte warten ..
Mitglied: colinardo
29.04.2014, aktualisiert um 18:56 Uhr
ist oben aktualisiert und noch eine Korrektur wegen Leerzeichen in Pfaden vorgenommen.

Grüße Uwe
Bitte warten ..
Mitglied: Jamesb10
30.04.2014 um 08:17 Uhr
Hallo

Super

+++ Spitze

Cool ++

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!!!!!
Bitte warten ..
Mitglied: colinardo
30.04.2014, aktualisiert um 08:37 Uhr
keine Ursache
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
Bitte warten ..
Mitglied: Jamesb10
01.05.2014 um 08:27 Uhr
Hallo
und schönen ersten Mai

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

Nicht ganz
01.
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
Bitte warten ..
Mitglied: Jamesb10
21.06.2014, aktualisiert um 10:50 Uhr
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

01.
find /media/reel/recordings -follow -name "* *" -type d | rename 's/ /_/g'
01.
find /media/reel/recordings -follow -name "*:*" -type d | rename 's/://g'
ps. diese Befehle hab ich als Hilfestellung bekommen

Mit Freundlichem Gruss

Jamesb-10
Bitte warten ..
Mitglied: colinardo
21.06.2014, aktualisiert um 15:41 Uhr
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
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

Grüße Uwe
Bitte warten ..
Mitglied: Jamesb10
24.06.2014 um 09:45 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Robocopy - Das System kann die angegebene Datei nicht finden (15)

Frage von imebro zum Thema Batch & Shell ...

Batch & Shell
gelöst XML-Datei: Pfade suchen, verlinkte Dateien kopieren und Pfade ändern (4)

Frage von ELEVATOR zum Thema Batch & Shell ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...