bildnummern umbenennen nach Regel: n->2n-1

Du suchst ein Programm für einen bestimmten Zweck?
Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 15.09.2020 19:08:14

Das mit den Dateinamen ist eigentlich ganz einfach - und zwar deshalb, weil wir uns gar nicht dafür interessieren. ;)
Alles was wir wissen müssen ist, dass sie fortlaufend (wenn auch mit Lücken) sind - nach welchem Muster spielt keine Rolle. Dann jagen wir einfach eine Schleife über die fortlaufenden Bilder und nutzen den ursprünglichen Ansatz mit den Dateinamen - nur nutzen wir nun nicht den Dateinamen als Quelle sondern den Schleifenzähler.
Ein Beispiel, wie das im Prinzip in bash gehen kann steht hier. [1] Nur nimmst du keine c-Code-Dateien sondern deine Bilder als Input und bildest die neuen Namen anhand des bekannten Algorithmus mit dem Schleifenzähler $f.

Was die Übertragung der Bilder angeht: Es gibt doch bestimmt ssh-Server-Äpps für Android, oder? Dann mountest du einfach dein Handy vom Rechner aus mit Debiansshfs und ziehst die Bilder runter.

Ich finde die Dateinamen die Android da vergibt übrigens äußerst sinnvoll, denn der Aufnahmezeitpunkt ist das Einzige das sich automatisch erfassen lässt. Natürlich wäre es schön, wenn da eine KI in dem Telefon stecken würde, die selbst richtig erkennt, dass dieses Bild "Oma_Ernas_achzigster_Geburtstag_-_Kaesekuchen_anschneiden.jpg" heißen müsste, oder in deinem Fall eben "Edmund_Stoiber_-_Gestammelte_Werke_-_Seite_3.jpg". Aber so eine KI gibt es leider nicht und wenn es sie gäbe, dann wäre sie nicht lokal auf deinem Handy sondern auf irgendeinem datengierigen Google-Server.


[1] https://www.cyberciti.biz/faq/bash-loop-over-file/

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von heinz » 15.09.2020 19:18:41

Hallo michaa7,

theoretisch sollte dieser Einzeiler tun was Du moechtest. (Wenn es nicht zu viele Bilder sind...)

Vielleicht Die Bilder vorher irgendwo sichern um "Ueberraschungen" zu vermeiden...

Ungetestet!

Code: Alles auswählen

seite=1;for datei in `ls -1 ./IMG_*`;do mv "$datei" "f-z-v-t_`printf '%03i' $seite`.jpg";let seite+=2;done
Gruss,
heinz

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 15.09.2020 19:32:42

heinz hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:18:41
Einzeiler
[..]
Der Linux-Kernel ist auch ein "Einzeiler". ;)

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von heinz » 15.09.2020 19:35:47

hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:32:42
Der Linux-Kernel ist auch ein "Einzeiler". :wink:
Naja, es steht doch alles in einer Zeile... 8)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 15.09.2020 19:38:55

Hier mit awk (angenommen die Dateinamen sind so einfach wie beschrieben, also ohne Whitespace und ohne Hochkommas):

Code: Alles auswählen

ls ... | awk '{printf("mv %s f-z-v-t_%03d.jpg\n", $1, NR*2-1)}'
Wenn die Ausgabe passt, dann einfach noch durch `sh' pipen, die Shell fuehrt die mv-Befehle dann aus.
Use ed once in a while!

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 15.09.2020 21:11:06

heinz hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:18:41
...
theoretisch sollte dieser Einzeiler tun was Du moechtest. (Wenn es nicht zu viele Bilder sind...)
Funktioniert super, mit mit Angabe der ersten Seite und frei zu wählendem Titel. Danke. Mal ein klitzekleiner erfolg ;-)
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 15.09.2020 21:28:03

hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:08:14
...
Ein Beispiel, wie das im Prinzip in bash gehen kann steht hier. [1] .[1] https://www.cyberciti.biz/faq/bash-loop-over-file/
Heinz' Lösung war einfacher ;-)
hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:08:14
Was die Übertragung der Bilder angeht: Es gibt doch bestimmt ssh-Server-Äpps für Android, oder? Dann mountest du einfach dein Handy vom Rechner aus mit Debiansshfs und ziehst die Bilder runter.
Die übertragung ist nicht das problem, das funktioniert mit smb und Ghostcommander prima. Das problem ist das dieses SCHxxxx-Android-Kameraprogamm offenbar in einen *virtuellen* Ordner speichert und dieser nicht im dateimanager sichbar ist (da hätte ich dann auch mit sshfs zweifel ob das dort sichtbar ist) Das ist ergonomische Folter und sollte als solche in Fachkriesen anerkannt werden.
hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:08:14
Ich finde die Dateinamen die Android da vergibt übrigens äußerst sinnvoll, denn der Aufnahmezeitpunkt ist das Einzige das sich automatisch erfassen lässt.
Da gebe ich dir grundsätzlich recht, das ist ein immer richtiges Sortiersystem ... bis du mit den Dateien etwas anfangen willst. Mit dem Einzeiler von heinz finde ich das aber handhabbar.
hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:08:14
.... oder in deinem Fall eben "Edmund_Stoiber_-_Gestammelte_Werke_-_Seite_3.jpg".
Zwar komme ich aus Bayern, und Stoibers Haupbahnhofs-da-ist-man-ja-dann-schon-am Flughafen-quasi-angekommen-am-Hauptbahnhof-in-den-Shuttle-abgefertigt-eingestiegen-quasi-direkt finde ich auch lustig ... aber ein Sammelalbum ... I woas ned ...
hikaru hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:08:14
.Aber so eine KI gibt es leider nicht und wenn es sie gäbe, dann wäre sie nicht lokal auf deinem Handy sondern auf irgendeinem datengierigen Google-Server.
Ea würde schon reichen, wenn das auf meinen Rechner wäre. Noch besser wäre es wenn diese Namensgebung des Smartfons sich allgemein durchsetzen würde und analog der Dateimanager eine Funktion hätten die datumUhrzeit.xyz in titel-fortlaufende.Nr.xyz wandeln würden, das wäre eine sinnvolle Standardbenennungskonvention für den Dateiaustausch.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 15.09.2020 21:29:07

Meillo hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:38:55
...
Wenn die Ausgabe passt, dann einfach noch durch `sh' pipen, die Shell fuehrt die mv-Befehle dann aus.
Danke dir, heinz' Lösung kann ich nur empfehlen ...
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 15.09.2020 21:44:20

michaa7 hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 21:29:07
Meillo hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 19:38:55
...
Wenn die Ausgabe passt, dann einfach noch durch `sh' pipen, die Shell fuehrt die mv-Befehle dann aus.
Danke dir, heinz' Lösung kann ich nur empfehlen ...
Mir ist letzlich egal mit welcher Loesung du dein Problem loest. Es ist klasse, dass heinz so schnell eine geliefert hat, die dein Problem loest. :THX: Daran ist nichts auszusetzen.

Rein interessehalber wuerde mich nur interessieren, *warum* du heinz' Loesung empfehlen kannst. ;-) Ist die besser als meine?
Use ed once in a while!

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 15.09.2020 23:11:31

Meillo hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 21:44:20
...

Rein interessehalber wuerde mich nur interessieren, *warum* du heinz' Loesung empfehlen kannst. ;-) Ist die besser als meine?
Da bin ich der falsche das zu beurteilen.

Ich habe mir alle Lösungen angeschaut , der Reihe nach (d.h. im wischblick überflogen). Hikarus verlinkte Lösung war ... fragenaufwerfend.

die Lösung von heinz sah ... übersichtlich aus, Seite 1 suggerierte einen Startwert der sich für gerade seiten anpassen ließe (sehe ich dann morgen wenn ich die geraden Seiten abfotografiere), freier Titel implementiert ...

und deine Lösung stand erst weiter unten. ;-). Zudem war die von heinz gebrauchsfertig zusammengerührt, wie der ketchup :))) und vermutlich hätte ich beim pipen doch irgendwas nicht richtig gemacht. Zu deutsch heinz hat mein "ich-möchte-full-service" bedient.

Ich komme ständig vom hölzchen aufs stöckchen und bin froh um jede aktion die sich beenden läßt.

In diesem Sinne Danke an alle.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 15.09.2020 23:21:03

heinz' Lösung war die gleiche wie meine. Nur hat er sie "verzehrfertig" serviert, während es bei mir eher ein Kochrezept war. ;)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 16.09.2020 07:59:57

michaa7 hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 23:11:31
Meillo hat geschrieben: ↑ zum Beitrag ↑
15.09.2020 21:44:20
...

Rein interessehalber wuerde mich nur interessieren, *warum* du heinz' Loesung empfehlen kannst. ;-) Ist die besser als meine?
Da bin ich der falsche das zu beurteilen.

Ich habe mir alle Lösungen angeschaut , der Reihe nach (d.h. im wischblick überflogen). Hikarus verlinkte Lösung war ... fragenaufwerfend.

die Lösung von heinz sah ... übersichtlich aus, Seite 1 suggerierte einen Startwert der sich für gerade seiten anpassen ließe (sehe ich dann morgen wenn ich die geraden Seiten abfotografiere), freier Titel implementiert ...

und deine Lösung stand erst weiter unten. ;-). Zudem war die von heinz gebrauchsfertig zusammengerührt, wie der ketchup :))) und vermutlich hätte ich beim pipen doch irgendwas nicht richtig gemacht. Zu deutsch heinz hat mein "ich-möchte-full-service" bedient.
Okay, danke fuer die Erlaeuterung. Die ist gut nachvollziehbar.


Man hat mich per PM gebeten, dass ich meine Loesung erlaeutere, weil meine Nachfrage den Eindruck erweckt hat, dass ich sie besser finde. Nun, ich finde sie technisch besser, wobei das weniger mit dem vorliegenden Problem zu tun hat als mehr mit Style und so. (Das soll keine Kritik an heinz' Loesung sein, die dir ja genau das geliefert hat, was du gesucht hast, und darum gewissermassen genau richtig war.)

Was ich an meiner Umsetzung mag:

- Die Arbeitsschritte sind klarer getrennt: (1) Um welche Dateien geht es, (2) Dateinamen umbauen, (3) Umbenennungen durchfuehren. Jeder der Schritte kann einfach ausgetauscht werden. Fuer einen Dry-Run (Vorschau) lasse ich einfach das `|sh' weg. Ich kann die Ausgabe der Befehle oder die Liste der Dateien einfacher in eine Datei schreiben und aus ihr lesen. Das alles geht mit heinz' Umsetzung schon auch (z.B. `echo' vor das `mv' schreiben), aber es erfordert Veraenderungen im Befehl und nicht am Anfang oder Ende. Damit ist der Befehl schlechter mit anderen Tools kombinierbar, im Sinne des Pipes-and-Filters-Konzepts. Bei meinem Befehl kann die Ausgabe beispielsweise einfach noch duch z.B. `grep' gefiltert werden, um nur manche Umbenennungen durchzufuehren, das geht bei heinz' Umsetzung nicht.

- Mein Befehl ist besser lesbar (awk-Kenntnisse vorausgesetzt), weil er kuerzer ist und weniger Noise enthaelt. Er besteht nur aus den relevanten Komponenten: die relevanten Dateien, printf, Formatstring fuer den mv-Befehl, bisheriger Dateiname, Nummer des neuen Dateinamens (genau so notiert wie michaa7 das im Threadtitel gemacht hat), sh zur Durchfuehrung. Alles in der Reihenfolge, man muss beim Lesen nicht vor und zurueck springen. (Schwierig sind lediglich `$1' (was `$0' heissen sollte) und `NR' in awk, fuer awk-Programmierer gehoeren die aber zum Standard-Repertoire.)

- Keiner der beiden Befehle kann derzeit mit Whitespace umgehen. In meinem Fall muss man im awk-Befehl Quoting hinzufuegen (und `$0' statt `$1' verwenden), das wird etwas haesslich, darum habe ich es weggelassen; alternativ schreibt man den Befehl in eine awk-Scriptdatei, dann ist es mit dem Quoting einfacher. Bei heinz muss man IFS setzen bzw. eine while-read-Schleife verwenden.

- Keiner der beiden Befehle kann mit Quotes in Dateinamen umgehen. Bei heinz wuerde man es wie beim Whitespace beschrieben loesen. Bei mir ist ein zusaetzlicher gsub-Befehl (global substitute) noetig, der die Quotes escapt. An der Stelle ist meine Umsetzung umstaendlicher.

- Mein Befehl hat keine Probleme mit beliebig vielen Dateinamen, sie werden nach und nach durch die Pipeline geschaufelt. Wenn das Globbing auf zu viele Dateien matcht, kann man es durch ein `find' ersetzen. Bei heinz wird einmal durch das Globbing und zudem beim `for' eine ggf. sehr lange Befehlszeile aufgebaut. Will man das verhindern muss man die Schleife in while-read umbauen.

- Ein Vorteil von heinz' Loesung ist, dass es schwerer ist, andere Befehle als `mv' auszufuehren. In meinem Fall entspricht das Pipen durch `sh' einem `eval' ... und das ist bekanntlich ``evil''. Da muss man etwas mehr achtgeben.

So viel mal als Analyse. Fuer das vorliegende Problem macht es keinen Unterschied. Genereller gesehen finde ich meine Umsetzung in ihrem Charakter orthogonaler und mehr dem Pipes-and-Filters-Ansatz entsprechend, was ihr dessen Vorteile gibt. Das finde ich mehr Unix-like, ist aber auch mehr old-style, wie mir scheint. Letztlich kommt es wohl hauptsaechlich darauf an, wie man denkt und welche Ansaetze man gewohnt ist.

heinz' Umsetzung finde ich nicht schlecht. Es ist nur so, dass ich sie nicht besser finde, und da hatte mich etwas irritiert, dass sie empfohlen worden ist. Nun hat sich ja aber geklaert wie diese Empfehlung zu verstehen war.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 16.09.2020 10:44:34

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 07:59:57
Man hat mich per PM gebeten, dass ich meine Loesung erlaeutere, weil meine Nachfrage den Eindruck erweckt hat, dass ich sie besser finde.
Ok, spielen wir mit offenen Karten: Die Nachfrage kam von mir.
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 07:59:57
- Die Arbeitsschritte sind klarer getrennt: (1) Um welche Dateien geht es, (2) Dateinamen umbauen, (3) Umbenennungen durchfuehren. Jeder der Schritte kann einfach ausgetauscht werden. Fuer einen Dry-Run (Vorschau) lasse ich einfach das `|sh' weg. Ich kann die Ausgabe der Befehle oder die Liste der Dateien einfacher in eine Datei schreiben und aus ihr lesen. Das alles geht mit heinz' Umsetzung schon auch (z.B. `echo' vor das `mv' schreiben), aber es erfordert Veraenderungen im Befehl und nicht am Anfang oder Ende. Damit ist der Befehl schlechter mit anderen Tools kombinierbar, im Sinne des Pipes-and-Filters-Konzepts. Bei meinem Befehl kann die Ausgabe beispielsweise einfach noch duch z.B. `grep' gefiltert werden, um nur manche Umbenennungen durchzufuehren, das geht bei heinz' Umsetzung nicht.
Das kann ich nachvollziehen ...
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 07:59:57
- Mein Befehl ist besser lesbar (awk-Kenntnisse vorausgesetzt), weil er kuerzer ist und weniger Noise enthaelt. Er besteht nur aus den relevanten Komponenten: die relevanten Dateien, printf, Formatstring fuer den mv-Befehl, bisheriger Dateiname, Nummer des neuen Dateinamens (genau so notiert wie michaa7 das im Threadtitel gemacht hat), sh zur Durchfuehrung. Alles in der Reihenfolge, man muss beim Lesen nicht vor und zurueck springen. (Schwierig sind lediglich `$1' (was `$0' heissen sollte) und `NR' in awk, fuer awk-Programmierer gehoeren die aber zum Standard-Repertoire.)
... das hier aber nicht. Und ich glaube nicht, dass das an meinen mangelnden awk-Kenntnissen liegt.
Im Detail:
1. Kürze um der Kürze willen sehe ich nicht als Zeichen für Codequalität.
2. Wenn du sagst, dass dein Befehl weniger Noise enthält, dann müsstest du den Noise in heinz' Befehl ("irrelevante Komponenten"?) benennen können. Ich sehe keinen. Ich finde es lediglich didaktisch ungeschickt, die Lösung als "Einzeiler" darzustellen.
3. Dass man bei deiner Lösung beim Lesen nicht vor und zurückspringen mus stimmt nicht, denn man muss zumindest die Einsetzungen bei printf machen.
4. $1/$0 und NR: Mag sein, dass das Standardrepertoire von awk ist. Zumindest Ersteres ist auch ohne awk-Kenntnisse Programmierer-Allgemeinwissen. Aber für NR braucht man dann wirklich spezifische Kenntnisse. Das Äquivalent dazu in heinz' Lösung ist das "let". Mag sein, dass das mein Bias ist, aber ich finde das zumindest nicht fordernder als awks NR. Die Funktion von beiden erschließt sich für Unwissende aus dem Aufgabenkontext.
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 07:59:57
- Mein Befehl hat keine Probleme mit beliebig vielen Dateinamen, sie werden nach und nach durch die Pipeline geschaufelt. Wenn das Globbing auf zu viele Dateien matcht, kann man es durch ein `find' ersetzen. Bei heinz wird einmal durch das Globbing und zudem beim `for' eine ggf. sehr lange Befehlszeile aufgebaut. Will man das verhindern muss man die Schleife in while-read umbauen.
Danke! Das hatte ich noch nicht bedacht.
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 07:59:57
heinz' Umsetzung finde ich nicht schlecht. Es ist nur so, dass ich sie nicht besser finde, und da hatte mich etwas irritiert, dass sie empfohlen worden ist. Nun hat sich ja aber geklaert wie diese Empfehlung zu verstehen war.
Ok. Dann sind wir wieder einer Meinung.

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 16.09.2020 12:19:49

Also, abschließend muß ich hier jetzt noch folgendes erwähnen.

Das ist ein thread wie er mir Spaß macht. Ich bin ja zugegebenermaßen hier eher einer der Konsumenten, der denjenigen hier, die es können seine Alltagsprobleme auferlegt in der Hoffnung auf schnelle Lösung. Und oft auch genervt und verzweifelt bis hin zu nur mühsam beherrscht aggressiv ist von allem was nicht funktioniert ... was man meinen postings dann auch anmerkt.

Der Fachdiskussion ($0 vs. $1 etc) kann ich nicht folgen, habe sie dennoch durchgelesen (soweit nur warum mir gebrauchsfertiges ganz recht war). Rein vom theoretischen Ansatz (ich nenne es mal Modularität) her gefällt mir was Meillo zu seiner Lösung schreibt. Aber um die Vorteile auch in Anspruch nehmen zu können, geschweige denn sie mit Verstand genießen zu können fehlt es mir an einfachsten bash-basics.

Ich hatte mal begonnen ein bash TUT durchzuarbeiten, das aber wieder beendet, weil bei mir viel stärker hängen bleibt oder sich sogar in den Vordergrund drängt was ich nicht verstehe als was ich nachvollziehen kann. Ich muß immer erst *alles* verstanden haben bevor ich einen Teil davon verwenden kann. Das ist leider sehr unökonomisch und bedarf eines Interesses was meine Anforderungen als User bei Weitem übersteigt.

Natürlich finde ich Hilfe zur Selbsthilfe sinnvoll, aber wie schon mehrfach erwähnt, ich war und bin froh dass es hier auf ein einfaches "so-geht-das" hinausgelaufen ist.

Danke.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von eggy » 16.09.2020 15:01:38

@hikaru: Meillos Lösung ist schon deswegen viel guter weil da awk drin ist . so. :mrgreen: (egal ob es was tut, solange das nichtstun mit awk geschieht kann es garnicht falsch sein)
michaa7 hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 12:19:49
Der Fachdiskussion ($0 vs. $1 etc) kann ich nicht folgen, habe sie dennoch durchgelesen (soweit nur warum mir gebrauchsfertiges ganz recht war).
Einfach fragen wenn was unklar ist, irgendwer (Meillo :mrgreen:) erklärts sicher gerne ausführlicher

awk ist jedenfalls nen tolles Spielzeug, lohnt sich, sich damit mal etwas in Ruhe zu beschäftigen. Bei awk ist $0 die ganze aktuelle Zeile der Daten, $1 das erste Feld davon.
Wenn Du nen Leerzeichen als Feldtrenner hast und als Eingabedaten nen Dateinamen "datei.txt" ist, spielt das in diesen Fall keine Rolle, ob $0 und $1, beide Felder beinhalten "datei.txt". Hast Du dann aber ne Datei "meine tolle datei.txt" dann passiert evtl Murks, weil in $0 "meine tolle datei.txt" drinsteht und in $1 nur "meine".

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 16.09.2020 15:07:11

eggy hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 15:01:38
@hikaru: Meillos Lösung ist schon deswegen viel guter weil da awk drin ist
YMMD! :THX:

... dann lehne ich mich mal zurueck. ;-)
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 16.09.2020 15:17:01

eggy hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 15:01:38
@hikaru: Meillos Lösung ist schon deswegen viel guter weil da awk drin ist . so. :mrgreen:
Mir war von Anfang an klar, dass sowas kommt:
hikaru hat geschrieben: ↑ zum Beitrag ↑
10.08.2020 20:47:09
Hier kommt bestimmt noch jemand mit einer eleganten awk-Lösung um die Ecke, die im Prinzip das Gleiche macht.
eggy hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 15:01:38
(egal ob es was tut, solange das nichtstun mit awk geschieht kann es garnicht falsch sein)
Verstehe! Dann ist awk sowas wie das Gegenstück zu Perl:
Perl macht immer $irgendwas, selbst wenn beim Coden nur die Katze über die Tastatur gelaufen ist.
Da fragt sich dann, was passiert, wenn man awk und Perl kombiniert. Implodiert dann das Universum? ;)

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 16.09.2020 15:44:41

eggy hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 15:01:38
...

Einfach fragen wenn was unklar ist, irgendwer (Meillo :mrgreen:) erklärts sicher gerne ausführlicher
...
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 15:17:01
...implodiert dann das Universum? ;)
Gut, dann mache ich hier schnell weiter bevor ihr unachtsam werdet:

Natürlich stehen alle Bilder Kopf, weil Smartfon, Kamera, Stativ, Platz, Auge, Hand und Umblättern eine Vielzahl von sinnvollen, aber aber auch am Ende kopfstehende Varianten zulassen.

Und lerneifrig wie ich bin habe ich mir zusammengeschustert:

Code: Alles auswählen

ls  *.jpg | convert -rotate 180 *.jpg
(und jetzt denkt euch zusätzlich alle unsinnigen varianten für "*.jpg" aus; hätte ich die sinnvolle/richtige gefunden würde ich nicht fragen ;-) )

Also: alle fotos um 180° drehen, namen *nicht* ändern.

(Dass ich ein einzelnes bild mit convert -rotate 180 bild1.jpg bild1.jpg entsprechend drehen kann ist klar. Aber alle bilder durchzuschleußen erfodert nicht vorhandenes Wissen ;-) . Ich würde gerne grundsätzlich verstehn wie ich einen bash befehl mit einer schleife kombinieren kann. Schon daran bin ich bei meinem bashstudium gescheitert)
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von hikaru » 16.09.2020 16:01:04

Hier kommen wir zu dem Grund, warum ich es unglücklich finde, dass heinz sein Script als Einzeiler verkauft hat. Dabei geht nämlich mMn die Übersichtlichkeit für dich verloren.
Schreiben wir das "vernünftig" auf, dann sieht es so aus:

Code: Alles auswählen

seite=1
for datei in `ls -1 ./IMG_*`
do
  mv "$datei" "f-z-v-t_`printf '%03i' $seite`.jpg"
  let seite+=2
done
Wie du siehst, ist da schon eine for-Schleife enthalten. Innerhalb dieser Schleife kannst du convert prinzipiell an beliebiger Stelle einhängen. Am einfachsten wäre es, du machst das vor dem Umbenennen, weil du hier den Dateinamen schon fertig in der Variablen "$datei" hast:

Code: Alles auswählen

seite=1
for datei in `ls -1 ./IMG_*`
do
  convert -rotate 180 "$datei"
  mv "$datei" "f-z-v-t_`printf '%03i' $seite`.jpg"
  let seite+=2
done
Edit2:
Edit1 zurück. Zu viel Perl heute. ;)
Zuletzt geändert von hikaru am 16.09.2020 16:08:01, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 16.09.2020 16:06:12

`convert' erzeugt eine neue Datei mit dem Bearbeitungsergebnis. In-place-Aenderungen macht man mit `mogrify'. Die beiden Befehle koennen das Gleiche nur arbeitet zweiteres eben in-place. Da geht dann sowas wie:

Code: Alles auswählen

mogrify -rotate 180 *.jpg

(Auf die anderen Seitenaeste des Themas kann ich gerade zeitlich nicht eingehen, aber in der Sache wollte ich euch nicht in der Luft haengen lassen.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 16.09.2020 16:09:28

hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 16:01:04

Code: Alles auswählen

seite=1
for datei in `ls -1 ./IMG_*`
do
  convert -rotate 180 "$datei"
  mv "$datei" "f-z-v-t_`printf '%03i' $seite`.jpg"
  let seite+=2
done
So arbeitet `convert' nicht, es braucht immer Input- und Output-File. Wenn du `convert' durch `mogrify' ersetzt, dann geht es. Einfacher waere aber:

Code: Alles auswählen

for datei in `ls -1 ./IMG_*`
do
  convert -rotate 180 "$datei" "f-z-v-t_`printf '%03i' $seite`.jpg"
  let seite+=2
done
EDIT: ... wobei das :oops: Kopien erzeugt ... Ach, man sollte nicht mal schnell noch posten wollen, wenn man eigentlich keine Zeit hat. :facepalm:



(Btw: Das `-1' bei `ls' ist nicht noetig. Wenn die Ausgabe nicht auf's Terminal geht, sondern in einen anderen Befehl verhaelt sich `ls' automatisch wie `ls -1'.)
Use ed once in a while!

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 16.09.2020 16:26:00

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 16:06:12
`convert' erzeugt eine neue Datei mit dem Bearbeitungsergebnis. In-place-Aenderungen macht man mit `mogrify'. Die beiden Befehle koennen das Gleiche nur arbeitet zweiteres eben in-place. Da geht dann sowas wie:

Code: Alles auswählen

mogrify -rotate 180 *.jpg

(Auf die anderen Seitenaeste des Themas kann ich gerade zeitlich nicht eingehen, aber in der Sache wollte ich euch nicht in der Luft haengen lassen.)
Das tut es perfekt. Danke.

Die Schleifenvariante werde ich mir für das Schleifenstudium vornehmen. Danke auch dafür.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von eggy » 16.09.2020 16:47:47

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 16:06:12
Die beiden Befehle koennen das Gleiche nur arbeitet zweiteres eben in-place.
@Meillo: fast

Code: Alles auswählen

diff convert.c  mogrify.c   |wc
   8073   22177  298058
mogrify kennt z.B. kein --help

</klugscheissmodus>

Aber ja, in den meisten Fällen kanns das gleiche, nen paar Optionen machen inplace vermutlich keinen Sinn, und wenn ich es richtig in Erinnerung hab, gab es minimale Unterschiede in irgendwelchen super speziellen Sonderfällen, wo man das eine und nicht das andere nehmen musste, aber frag nicht was das war, ist schon ewig her

Und keine Sorge, wir hätten das auch gewusst - Du warst nur mal wieder schneller :mrgreen:

@hikaru: awk-perl-Katzen man könnte noch versuchen Butterbrote einzubauen

michaa7
Beiträge: 4628
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von michaa7 » 16.09.2020 17:49:36

So, nun ist das Thema gegessen:

Habe eben die gradzahligen Seiten abfotografiert. Ging mit Seite 2 los, den Umschlag hatte ich schon gestern per Hand angepasst. Kleiner Stolperstein: Heute von hinten fotografiert, war umblättertechnisch am einfachsten. Schlau wie ich dank euch nun bin führte das zu folgender Befehlszeile:
seite=2;for datei in `ls -r -1 ./IMG_*`;do mv "$datei" "titel_`printf '%03i' $seite`.jpg";let seite+=2;done
DONE!

Thanks.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bildnummern umbenennen nach Regel: n->2n-1

Beitrag von Meillo » 16.09.2020 22:27:08

eggy hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 16:47:47
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2020 16:06:12
Die beiden Befehle koennen das Gleiche nur arbeitet zweiteres eben in-place.
@Meillo: fast

Code: Alles auswählen

diff convert.c  mogrify.c   |wc
   8073   22177  298058
mogrify kennt z.B. kein --help

</klugscheissmodus>
Die Option `--help' ist allerdings auch nur ein undokumentiertes Gimmick. Bei Imagemagick haben alle Optionen nur ein Minuszeichen, also `-help' und `-version', die beide in der Manpage stehen und bei beiden Programmen funktionieren. ;-)

Aber ja, in den meisten Fällen kanns das gleiche, nen paar Optionen machen inplace vermutlich keinen Sinn, und wenn ich es richtig in Erinnerung hab, gab es minimale Unterschiede in irgendwelchen super speziellen Sonderfällen, wo man das eine und nicht das andere nehmen musste, aber frag nicht was das war, ist schon ewig her
Mit `mogrify' kann man das Dateiformat nicht aendern, mit `convert' schon. Das ist wohl der wichtigste Fall. Darueber hinaus kann man bei `convert' getrennte Input- und Output-Optionen haben, z.B. `-density', das IIRC dafuer verwendet werden kann, eine Input-Vektor-Datei gewuenscht genau zu rastern, was dann aber unabhaengig davon ist, wie die Ausgabe-Datei gerastert ist. (Ich meine mich zu erinnern, dass ich das verwendet habe, um PDFs ins PNGs zu konvertieren. Die waren immer zu verpixelt. Die Output-Aufloesung hochzufahren hat nichts gebracht, aber die Input-Density anzupassen schon. So oder so aehnlich war das.) All dies kann `mogrify' nicht. Insgesamt ist `convert' maechtiger, aber `mogrify' ist bequemer wenn man viele Dateien in-place einfach bearbeiten will.

Und keine Sorge, wir hätten das auch gewusst - Du warst nur mal wieder schneller :mrgreen:
Ich versuche, euch das naechste Mal mehr Zeit zu geben. ;-)
Use ed once in a while!

Antworten