[gelöst] Unterschied/Fehler beim Zählen von Dateien

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] Unterschied/Fehler beim Zählen von Dateien

Beitrag von smutbert » 17.07.2019 17:36:52

Hallo liebe Forenmitglieder,

nachdem ich einige Fotodateien mitsamt der xmp-Sidecar-Dateien umbenannt habe und dementsprechend auch den Inhalt der xmp-Dateien mitanpassen müssen habe, bin ich dabei sicherzustellen, dass nichts schief gegangen ist. Ich will also überprüfen ob auch wirklich jede Datei, die in den xmp-Dateien in der Form von

Code: Alles auswählen

   xmpMM:DerivedFrom="20180820 0001.tif"
vorkommt, tatsächlich existiert.

So weit kein unlösbares Problem, aber ich bin jetzt schon beim Zählen der Dateien auf eine Diskrepanz gestossen, die ich mir nicht erklären kann:

Code: Alles auswählen

~/Darktable $ ls */*/*.xmp | wc -l 
6927
aber

Code: Alles auswählen

for folder in */*; do 
    for file in ${folder}/*.xmp; do  
        echo ${file}
    done
done | wc -l
liefert das Ergebnis 4075 (beides in zsh)

Wahrscheinlich gibt es sowieso eine elegantere Lösung, aber ich habe eine Schleife über alle Verzeichnisse gemacht, damit ich einfach im gleichen Verzeichnis in der die xmp-Datei liegt, die Existenz der zugehörigen Bilddatei überprüfen kann.

hilfe?
lg smutbert
Zuletzt geändert von smutbert am 17.07.2019 20:26:37, insgesamt 1-mal geändert.

DeletedUserReAsG

Re: Unterschied/Fehler beim Zählen von Dateien

Beitrag von DeletedUserReAsG » 17.07.2019 17:45:29

Ich würd beide Ausgaben in je ein File schmeißen, und diff drauf loslassen.

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Unterschied/Fehler beim Zählen von Dateien

Beitrag von smutbert » 17.07.2019 20:26:12

Danke, damit war klar welche Dateien nicht gezählt werden. Ich wollte gerade schreiben, dass ich damit nicht wirklich weiterkomme, bis mir aufgefallen ist, dass er einfach bei einem bestimmten Verzeichnis aufhört und das liegt daran, dass dieses Verzeichnis keine .xmp-Datei enthält und die Schleife mit einem Fehler abbricht.

Das ist insofern interessant als mir gar nicht klar war, dass ich ein Verzeichnis ohne Bild und xmp-Datei in meinem Fotoverzeichnis habe.

Was mein Skript angeht, das habe ich mit basename und dirname umgebaut. Es sieht jetzt so aus

Code: Alles auswählen

#!/bin/zsh

for file in  */*/*.xmp ; do
	folder="$(dirname "${file}")"
	xmpfile="$(basename "${file}")"
	picfile="$(grep "xmpMM:DerivedFrom" "${folder}/${xmpfile}" | awk -F\" '{print $2}')"
	test -f "${folder}/${picfile}" && continue
	echo "${folder}/${xmpfile}: ${picfile}"
done
und bestätigt, dass alle zu den xmp-Dateien gehörenden Fotos vorhanden sind.

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

Re: Unterschied/Fehler beim Zählen von Dateien

Beitrag von Meillo » 17.07.2019 20:52:21

smutbert hat geschrieben: ↑ zum Beitrag ↑
17.07.2019 20:26:12
Danke, damit war klar welche Dateien nicht gezählt werden. Ich wollte gerade schreiben, dass ich damit nicht wirklich weiterkomme, bis mir aufgefallen ist, dass er einfach bei einem bestimmten Verzeichnis aufhört und das liegt daran, dass dieses Verzeichnis keine .xmp-Datei enthält und die Schleife mit einem Fehler abbricht.
Das verstehe ich noch nicht.

Wenn ein Fehler auftritt, dann sollte der doch auf Stderr gemeldet werden und du solltest ihn folglich in der Ausgabe sehen. Passiert das nicht?

Und welche Art von Fehler soll denn auftreten, denn wenn ``foo/*.xmp'' auf keine Dateien matcht, dann bleibt es unveraendert stehen, siehe:

Code: Alles auswählen

B-) for i in /tmp/t*; do echo $i; done
/tmp/test
/tmp/tmux-1000

B-) for i in /tmp/x*; do echo $i; done
/tmp/x*
Dadurch sollte nichts abbrechen.


Zumindest die Erklaerung, wie du sie geschrieben hast, scheint mir nicht korrekt oder exakt genug zu sein (auch wenn die Auswirkung so sein mag).

Oder was uebersehe ich vielleicht?
Use ed once in a while!

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] Unterschied/Fehler beim Zählen von Dateien

Beitrag von smutbert » 17.07.2019 22:28:45

Du lässt einem aber auch nicht die kleinste Ungenauigkeit durchgehen, wenn es um die shell, reguläre Ausdrücke und solche Dinge geht
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.07.2019 20:52:21
Wenn ein Fehler auftritt, dann sollte der doch auf Stderr gemeldet werden und du solltest ihn folglich in der Ausgabe sehen. Passiert das nicht?
doch, aber ich hatte stderr umgeleitet, weil ich bei meinen anderen Versuchen unzählige (erwartete) Fehler bekommen habe, von denen ich mir nicht das Terminal zukleistern lassen wollte, aber selbst wenn ich den Fehler gesehen hätte, wäre ich wahrscheinlich nicht gleich auf eine richtige und genaue Erklärung gekommen.
Ich bin mir ja nicht einmal sicher, dass ich eine solche Erklärung jetzt liefern kann, aber ich versuche es:

Der Fehler ist bei der verschachtelten Schleife im Eingangspost passiert und zwar hat die innere Schleife über die Dateien in dem einen Verzeichnis keine matches geliefert und ist mit einem Fehler abgebrochen, der dann auch die äußere Schleife beendet hat. In meiner interaktiven zsh hat das so ausgesehen

Code: Alles auswählen

$ for folder in */*; do 
>    for file in ${folder}/*.xmp; do
>        echo ${file}
>    done
> done | wc -l
zsh: no matches found: 2017/0318 noname/*.xmp
4075
(Die Leerzeichen in Datei- und Verzeichnissnamen haben übrigens verlässlich nichts mit dem Fehler zu tun.)

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

Re: [gelöst] Unterschied/Fehler beim Zählen von Dateien

Beitrag von Meillo » 18.07.2019 09:17:53

smutbert hat geschrieben: ↑ zum Beitrag ↑
17.07.2019 22:28:45
Du lässt einem aber auch nicht die kleinste Ungenauigkeit durchgehen, wenn es um die shell, reguläre Ausdrücke und solche Dinge geht
Es ist dem Verstehen nunmal ungemein zutraeglich, genau zu sein. ;-)


Der Fehler ist bei der verschachtelten Schleife im Eingangspost passiert und zwar hat die innere Schleife über die Dateien in dem einen Verzeichnis keine matches geliefert und ist mit einem Fehler abgebrochen, der dann auch die äußere Schleife beendet hat. In meiner interaktiven zsh hat das so ausgesehen

Code: Alles auswählen

$ for folder in */*; do 
>    for file in ${folder}/*.xmp; do
>        echo ${file}
>    done
> done | wc -l
zsh: no matches found: 2017/0318 noname/*.xmp
4075
Weiss jemand, ob das ein (evtl. an-/abschaltbares) Feature der zsh ist, Fehler/Meldungen zu werfen, wenn Globbings nicht expandiert werden konnten? Das scheint hier ja der Fall sein. Ich habe diese Meldung noch nie gesehen. In der mksh expandiert's dann halt einfach nicht. Der User muss sich selber drum kuemmern, den Fall zu behandeln.
Use ed once in a while!

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] Unterschied/Fehler beim Zählen von Dateien

Beitrag von smutbert » 18.07.2019 11:04:11

Ich hab

Code: Alles auswählen

setopt +o nomatch
zum abschalten dieses Features ergoogelt, es aber noch nicht ausprobiert

Antworten