staging.inyokaproject.org

find

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels find.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

  • Dein Einzeiler erfordert vom Leser die Kenntnis der Syntax von find und Kenntnis der Shell-Befehle.

Ich wüsste nicht, welchen Shell-Befehl man hier kennen muss außer dem Pipe-Symbol, welches auch in der for-Schleife gebraucht wird. Und dass der Leser sich mit der Syntax von find befasst, sollte in einem Artikel über find ja wohl nichts außergewöhnliches sein.

  • Mein Befehl erfordert nur die Kenntnis der Shell-Befehle.

Die for-Befehl-Syntax hat so einige Tücken, die erst mal verstanden werden müssen (siehe z.B. voriger Beitrag und for-schleife-fuer-dateien-in-verzeichnis-ich-v).

  • Dein Einzeiler startet für jeden Fund einen Prozess (-exec), der einen weiteren Prozess startet (sh), der in Subshells die Programme mediainfo und grep startet. → 4 Prozesse für jeden Fund.

-exec ist kein weiterer Prozess, sondern wird innerhalb find ausgeführt. → 3 Prozesse für jeden Fund.

  • Mein Befehl läuft in der ohnehin schon laufenden Shell, die darin für jeden Schleifendurchlauf jeweils eine Subshell für die Programme mediainfo und grep startet. → 2 Prozesse für jede Datei. Ich gewinne.

Auch echo ist ein eigener Prozess. → 3 Prozesse für jede Datei.
Damit sind wir pari pari.

... Warum Du das Ergebnis per Pipe nochmal einließt und erneut ausgibst, verstehe ich nicht.

Um das vorangestellte "./" zu entfernen. Das ist eben der Trick, der mit find auf ein Glob erreicht wird, falls aus welchem Grund auch immer so eine Ausgabe gewünscht ist.

Richtig ist:

find *.mp3 

ist eine aufwendige Alternative zum simplen:

ls -1 *.mp3 

Nur schade, dass ls weder -exec kennt, noch weitere Filter wie z.B. -size hinzugefügt werden können.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Du verweist auf einen monströsen Einzeiler, der gerade nicht elegant und auch nicht geschickt ist, sondern geradezu find missbraucht. Außerdem kann er ohne find viel klarer formuliert werden, wie bereits rklm in seiner direkten Antwort gezeigt hat. Dein Einzeiler ist aus diesen Gründen untauglich als Beispiel im Artikel über das Programm find.

Ich nehme an, Du meinst diese Beispiele, die von Dir in einer vandalistichen Aktion im Handstreich ohne vorherige Diskussion in den Artikel eingebracht wurden

UlfZibis schrieb:

Was ist denn an dem Konstrukt

find *.mp3 -print -exec sh -c '[....."{}".....]' \;

komplizierter als an

for x in *.mp3 ; do echo $x ; [....."$x".....] ; done

Wegen 9482942 muss das 2. Beispiel geändert werden:

for x in *.mp3 ; do if [ -f "$x" ]; then echo $x ; [....."$x".....] ; fi ; done 

Deiner Meinung nach ist das vermutlich trotz for-schleife-fuer-dateien-in-verzeichnis-ich-v immer noch klarer, unkomplizierter und kürzer, als folgendes:

find *.mp3 -print -exec sh -c '[....."{}".....]' \; 

Man kann natürlich eine Shell wie die Bash per exec starten und dieser eine mehrfach quotierte Zeichenkette zur Ausführung übergeben – mehrfach quotiert, weil dieser Einzeiler vor der Interpretation durch die aufrufene Shell und durch find und durch die von find gestartete Shell geschützt werden muss, was Schwindel, Schädelweh, mentale Depressionen und dergl. fast sicher erzeugen wird.

Wo sieht man die schwindelerregenden Mehrfachquotierungen?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

UlfZibis schrieb dies und schrieb das hier

Auch wenn Du einiges Falsche behauptest, werde ich inhaltlich nicht mehr darauf eingehen.

Die ist die Diskussion über den Artikel über find und nicht der geeignete Platz für Deine Programmierer-Fehde. Bitte höre auf mit Deinen ständigen Entführungen dieser Diskussion! Und der Artikel über find ist auch nicht der geeignete Platz zur Ablage irgendwelcher Programmiertricks.

Antworten |