Bash Skript schreiben (lassen ...)

porn()pole

Commodore
Registriert
Mai 2002
Beiträge
5.063
Hola Jungs,

ich stolpere immer wieder über bestimmte Datenoperationen, wo mir ein speziell darauf zugeschnittenes Bash Skript wirklich weiterhelfen könnte. Leider bin ich immer noch nicht in der Lage, selbst solche Skripte von null zu schreiben, sobald sie auch nur etwas komplexer werden.

Was mir helfen würde:

a) einer von euch Supernerds tippt so einen 5-Zeiler in 12 Sekunden runter und ist mein persönlicher Held des Tages (jeweils)
b) vielleicht ein paar wertvolle Links zu Seiten, die derlei Skripte LOGISCH SORTIERT anbieten zur freien Verfügung und entsprechender Modifikation?

Was ich momentan brauche:

Meine Kamera schießt Bilder in JPEG und RAW zugleich. Nun würde ich gerne im JPEG-Ordner die schlechten/unbrauchbaren Bilder beim Durchschauen löschen. Danach würde ich gerne ein Skript anwerfen, welches die Dateinamen abgleicht und die zugehörigen RAWs ebenfalls löscht.
 
Bin im Fotobereich kein Spezialist, aber das hört sich nach einem alltäglichen Problem an. da gibt es bestimmt eine Lösung. Schon mal google gefüttert? ;)
 
Würde einen anderen Ansatz nehmen... nur in RAW arbeiten, sichten geht genau so schnell (bei Nikon mit viewnx).
Hast mehr Platz auf der Speicherkarte und bei Bedarf "entwickelst" dir was du brauchst.
 
Bash oder Batch? Wir sind hier im Linux Subforum ;)
 
  • Gefällt mir
Reaktionen: Raijin und abcddcba
Besorg dir Doch mal ein Workflow tool wie darktable, dass kann sowas meines wissens (da kannst Du das RAW und JPG) als eine Datei behandeln :)
 
Ich ergänze mal um eine langfristig deutlich effektivere Variante:
porn()pole schrieb:
Was mir helfen würde:

a) einer von euch Supernerds tippt so einen 5-Zeiler in 12 Sekunden runter und ist mein persönlicher Held des Tages (jeweils)
b) vielleicht ein paar wertvolle Links zu Seiten, die derlei Skripte LOGISCH SORTIERT anbieten zur freien Verfügung und entsprechender Modifikation?
c) ich mir die Grundlagen von Bash-Skripten aneigne, um sowas in Zukunft jederzeit selbst schreiben zu können.


Falls du Variante c) angehen möchtest:

Googeln nach "bash Skripting Einsteiger" liefert deutschsprachige Angebote. Als Referenz verwendest du die Manpage der bash ("man bash" zum Angucken). Diese Manpage ist sehr umfangreich. Man kann sie sich auch als ASCII-Text vorhalten (man bash | col -bx | uniq > bash.txt) oder am besten mal schick auf Papier ausdrucken:
1. ghostscript und pdfutils installieren
2. Mit "man -t bash | psnup -4 | ps2pdf - > bash.pdf" ein PDF erzeugen. Das ergibt ca. 10 doppelseitig bedruckte A4-Seiten.
 
mensch183 schrieb:
c) ich mir die Grundlagen von Bash-Skripten aneigne, um sowas in Zukunft jederzeit selbst schreiben zu können.
Dem kann ich nur beipflichten.

Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.


Wenn man sich regelmäßig vor dem Problem sieht, ein passendes Skript suchen zu müssen oder sich eines im Forum, o.ä. schreiben zu lassen, ist es sinnvoller, sich diesbezüglich fortzubilden. Das www platzt regelrecht vor Bash-Tutorials und auch wenn nicht immer genau das dabei ist was man gerade braucht, kann man sich für so banale Dinge wie Dateioperationen die passenden Teile ergoogeln. Wichtig ist dabei, dass man das Skript zunächst nur mit einem harmlosen Kommando wie ls testet und nicht gleich beim ersten Versuch aus Versehen auch wichtige Dateien löscht.
 
Ein paar Anhaltspunkte wie man bei sowas vorgeht:

Zunächst überlegt man sich die einzelnen Schritte, die das Skript abarbeiten muss

1) Alle RAW-Dateien duchgehen
2) JPG-Datei zu RAW-Datei suchen
3a) Ist die JPG-Datei vorhanden --> nichts tun
3b) Ist die JPG-Datei nicht vorhanden --> RAW-Datei löschen.

In einem Skript sähe das beispielhaft so aus:

Bash:
# 1 --> Alle RAW-Dateien durchgehen (auf Groß-/Kleinschreibung des Pfads bzw. der Erweiterung achten)
for f in /pfad/zu/den/raws/*.raw
do
# hier folgen Schritte 2+3
done


# 2 --> JPG-Datei zu RAW-Datei suchen
# Erstmal Dateinamen vom Pfad trennen (f = Variable aus der for-Schleife aus 1)
JPGFILE=${f##*/}

# Jetzt noch die Dateiendung anpassen (erst wird .raw entfernt, dann .jpg angehängt)
JPGFILE=${JPGFILE%.*}.jpg


# 3 --> Prüfen ob JPG-Datei vorhanden oder nicht
if [ -f "$JPGFILE" ]; then
   echo yep, JPG gefunden
else
   echo nope, kein JPG! RAW-Datei muss wech
fi

Zusammenbauen musst du das Skript selbst und anschließend auch um die Lösch-Funktion erweitern. Bash-Skripte haben zudem einen ganz bestimmten Header in der ersten Zeile, den musst du dir über eine Suchmaschine deiner Wahl auch noch raussuchen (Tip: Sieht fast so aus wie ein kryptischer Kommentar mit # davor). Da ich das Skript nur so aus dem Kopf gebastelt habe, erhebe ich keinerlei Ansprüche auf Vollständigkeit, Korrektheit oder gar Perfektion. Das soll nur ein Denkanstoß sein wie man an sowas rangeht.
 
Literaturliste:
Carl Albing, JP Vossen, Cameron Newham: bash Cookbook, O'Reilly
Arnold Robbins: Bash Pocket Reference, O'Reilly
Arnold Robbins, Nelson H. F. Beebe: Classic Shell Scripting, O'Reilly
Cameron Newham, Bill Rosenblatt: Learning the bash shell, O'Reilly

@Raijin: Der "kryptische header" nennt sich shebang und sagt dem Kernel welche shell zu verwenden ist. Meistens tut es #!/bin/sh (das ist ein symlink zur Standard-Shell), du kannst aber auch eine andere Shell verwenden.
 
Zuletzt bearbeitet:
Das musst du mir nicht erzählen, sondern war eher als "Eigenleistung" für den TE gedacht...

:schluck:
 
Wow, hier gings ja richtig rund während meiner Abwesenheit ;)

Ja, natürlich habt ihr Recht mit dem Vorschlag, ich soll mir mal die Grundlagen aneignen. Der Wille dafür ist auch klar erkennbar, allerdings scheitert es ein ums andere Mal an der notwendigen Zeit. Ich habe schon mehrere Anläufe hinter mir und kaum hatte ich mal ein Wissens-Polster, kam wieder eine längere Pause und alles war aus dem Kopf.

Ich bleibe dran! ... manchmal ... irgendwann.
 
Zurück
Oben