Bash Script für Dateinamen Extrahieren

Jan_123456

Benutzer
Mitglied seit
18. Feb 2022
Beiträge
5
Punkte für Reaktionen
1
Punkte
3
Hallo zusammen,


leider kenne ich mich mit Bash Programmierung nicht aus.

Ist es möglich mit einer Schleife ein ganzes Verzeichnis durch zu gehen und bei allen Dateinamen einen bestimmten Bereich mit den beiden Trennzeichen zu extrahieren und in einer Textdatei zu exportieren.

Also von diesen Dateinamen -> WasGehtSoBeiDir{{1234}}WetterMond.jpg
sollte das 1234 extrahiert werden und in einer Textdatei geschrieben werden und das für alle Dateien im Verzeichnis.

Ist sowas mit Bash möglich und hat jemand eine Idee oder umfasst Bash nicht die Benötigten Befehle hierfür?

Viele Dank für eure Hilfe
Jan
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Ist WasGehtSoBeiDir und WetterMond.jpg ist immer gleich?
Sind die geschweiften Klammern auch real vorhanden?
Handelt es sich bei dem Suchergebnis immer um Zahlen und sind es immer gleich viel Stellen?
 

Jan_123456

Benutzer
Mitglied seit
18. Feb 2022
Beiträge
5
Punkte für Reaktionen
1
Punkte
3
Nein leider Ist alles nicht vorhersehbar also das in der Geschweifte Klammer und davor, dahinter ist auch unterschiedlich.

Also von anderen Sprachen kenne ich das so. Das man ein split Zeichen definiert also das { und das Ergebnis in ein Array packt und ab den } Zeichen alles nach hinten abschneidet. Und schon hat man das Ergebnis. Geht das in Bash auch?
 

Jan_123456

Benutzer
Mitglied seit
18. Feb 2022
Beiträge
5
Punkte für Reaktionen
1
Punkte
3
Ja genau die sind am Anfang immer so {{ und dann was ich brauche und am Ende immer so }}.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Es wäre wahrscheinlich auch eleganter möglich …

Bash:
dir="/volume1/test"

while read line ; do
    echo "$line" | grep -oP "(?<=[{]{2}).*(?=[}]{2})" >> "$dir/ausgabe.txt"
done <<<"$(ls -t "$dir" | grep '{{.*}}')"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Tommes

Jan_123456

Benutzer
Mitglied seit
18. Feb 2022
Beiträge
5
Punkte für Reaktionen
1
Punkte
3
Borr Cool. Es funktioniert. Kann man noch einstellen das bei jeden Script Ausführung die Datei überschrieben wird. Jetzt ist es so dass er es immer unten anhängt, wenn ich es neu ausführe.


Vielen Dank für deine Hilfe
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Dann setze dafür noch ein rm "$dir/ausgabe.txt" davor.

Bash:
dir="/volume1/test"
rm "$dir/ausgabe.txt"

while read line ; do
    echo "$line" | grep -oP "(?<=[{]{2}).*(?=[}]{2})" >> "$dir/ausgabe.txt"
done <<<"$(ls -t "$dir" | grep '{{.*}}')"
 
Zuletzt bearbeitet:

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.164
Punkte für Reaktionen
412
Punkte
393
Hallo,
eigentlich sollte die Änderung von
Code:
echo "$line" | grep -oP "(?<=[{]{2}).*(?=[}]{2})" >> "$dir/ausgabe.txt"
zu
Code:
echo "$line" | grep -oP "(?<=[{]{2}).*(?=[}]{2})" > "$dir/ausgabe.txt"
reichen.
>> anhängen
> neu schreiben.

Gruß Götz
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Dann würde die Textdatei doch aber bei jeden Schleifendurchlauf gelöscht und die gewünschten Zeilen nicht gesammelt, oder?

Aber das bringt mich auf die Idee, dass man sich die Schleife ja sparen kann:
Bash:
dir="/volume1/test"
ls -t "$dir" | grep -oP "(?<=[{]{2}).*(?=[}]{2})" > "$dir/ausgabe.txt"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: tokon und goetz

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.164
Punkte für Reaktionen
412
Punkte
393
Hallo,
hast recht, sorry hab ich zu kurz gedacht.

Gruß Götz
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat