Bash Script für Dateinamen Extrahieren

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Jan_123456

Benutzer
Registriert
18. Feb. 2022
Beiträge
5
Reaktionspunkte
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
 
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?
 
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?
 
Ja genau die sind am Anfang immer so {{ und dann was ich brauche und am Ende immer so }}.
 
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
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
 
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:
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
 
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
Hallo,
hast recht, sorry hab ich zu kurz gedacht.

Gruß Götz
 
Status
Für weitere Antworten geschlossen.
 

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