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:

Ich bin fertig mit der Überarbeitung und eröffne für die neue Fassung nun die Diskussion.

An vielen Stellen sehe ich bessere und exaktere Erklärungen, als vorher. 👍 An manchen Stellen wurde IMHO aber auch übertrieben und manches selbstverständliche hätte nicht unbedingt erklärt werden müssen. So ist der Artikel jetzt bestimmt doppelt so lang wie vorher.

Nicht selbstverständlich ist, wie man mehrere Programmaufrufe (und Shell-Funktionen) elegant/geschickt und mit wenig Aufwand verkettet.
Es braucht eher selten den maximalen Aufwand mit einem separaten Skript (Erstellung, Benennung, Parametrierung, geeigneten Ablageort finden, Überlegungen zur Relativität von verwendeten Pfaden und deren Korrektur, chmod einstellen, etc.)
Da der Artikel jetzt eh sehr viel länger als vorher ist, verstehe ich nicht, warum gerade hier Zeilen gespart werden sollen, und – zudem begründungslos – meine 3 Beispiele rausgeflogen sind.

Auch wie man das vorangestellte "./" in den Suchergebnissen vermeidet, könnte für manche interessant sein, zumal in im Netz zu findenden Beispielen dieser Trick oft angewandt findet, und man dann besser versteht, warum die das machen, statt -name zu verwenden.

Diese Überlegungen sollten noch berücksichtigt werden.

Der Benutzer kann verbal oder als numerische Benutzerkennung UID angegeben werden.

Das ist ja interessant, dass find auch per Spracheingabe bedient werden kann. 😉
Ich würde hier "als Name" oder "namentlich" nehmen.

Das Kommando ..... Am Ende muss der ganze Befehl mit einem Semikolon abgeschlossen werden.

Warum 2 verschiedene Bezeichnungen?

Das Muster 'susan*' wird gesucht

Nein, es werden Dateinamen gesucht, die dem Muster entsprechen.

Baustelle/find (Abschnitt „Dateien-bearbeiten“)

Die Überschrift finde ich sehr irreführend. Mit -exec werden Dateien ja nicht grundsätzlich "bearbeitet", sondern meist lediglich verwendet, oft auch nur deren Dateinamen. Auch geht es hier nur um die von find gefundenen Datei(nam)en. Also vielleicht so: "Mit gefundenen Dateipfaden arbeiten" oder "Gefundene Dateipfade (weiter)verwenden" oder "andere/externe Programme mit gefundenen Dateipfaden ausführen".

Im Artikel wird der Begriff "Glob" mehrfach verwendet. Ich denke, nicht jeder Leser weiß, was der bedeutet.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

UlfZibis schrieb:

kB schrieb:

Ich bin fertig mit der Überarbeitung und eröffne für die neue Fassung nun die Diskussion.

Danke für Deine Stellungnahme.

[…] Nicht selbstverständlich ist, wie man mehrere Programmaufrufe (und Shell-Funktionen) elegant/geschickt und mit wenig Aufwand verkettet.

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.

[…] warum […] begründungslos – meine 3 Beispiele rausgeflogen sind

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

  1. find "*.jpg" -exec convert {} -quality 80% klein/{} \; -exec touch -r {} klein/{} \; 
  2. find "*/01*.mp3" -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \; 
  3. find "*.flac" -print -exec bash -c 'read x<<<"{}"; ffmpeg -i "$x" -q 2 -c:v copy "${x/%.flac/.mp3}" 2>/dev/null && touch -r "$x" "${x/%.flac/.mp3}"' \; 

Zu 1: Das ist das bereits oben besprochene Beispiel.

Zu 2: Das ist ähnlich zu bewerten wie 1. Die Aufgabe kann z.B. ohne find viel klarer gelöst werden, sogar als Einzeiler:

for x in */01*.mp3 ; do echo $x ; mediainfo "$x" | grep "^Bit rate" ; done

Zu 3: Auch das ist ähnlich, ich spare mir aber ausführliche Ausführungen.

Darüber hinaus sind alle 3 Beispiele auch deshalb zu verwerfen, weil sie auf einem Standardsystem ohne Installation zusätzlicher Pakete gar nicht funktionieren.

Der „Trick“ besteht in allen 3 Beispielen einfach im Missbrauch von find, um sich eine For-Schleife zu sparen und dann mit komplizierten Konstrukten die Probleme zu vermeiden, die man mit klarer Shell Syntax gar nicht hat. Diese Beispiele zeigen keine Eigenschaften von find, und erst recht keine, die nicht schon im Artikel erklärt wurden – und aus diesen Gründen gehören sie auch nicht in einen Artikel über find.

Auch wie man das vorangestellte "./" in den Suchergebnissen vermeidet, […]

Aus diesem Grund habe ich es jetzt ja auch im Artikel thematisiert, und es wird eine elegante Lösung mit den Sprachmitteln von find vorgestellt. Es ist zwar etwas spät im Jahr, aber ich wünsche trotzdem viel Spaß beim Suchen des Ostereis!

Diese Überlegungen sollten noch berücksichtigt werden.

Ich denke, diese Überlegungen habe ich berücksichtigt bis auf den Wunsch nach „mit komplizierteren Beispielen die Mächtigkeit von find vor Augen führen“. Darüber habe ich länger nachgedacht und schließlich darauf verzichtet, da ja in der zitierten Dokumentation bereits solche Beispiel erläutert werden und – wie Du ja auch kritisierst – der Artikel bereits ziemlich lang ist.

Der Benutzer kann verbal oder als numerische Benutzerkennung UID angegeben werden.

[…] Ich würde hier "als Name" oder "namentlich" nehmen.

Solche Anregungen werde sammeln und zu einem späteren Zeitpunkt gemeinsam einarbeiten.

Das Kommando ..... Am Ende muss der ganze Befehl mit einem Semikolon abgeschlossen werden.

Warum 2 verschiedene Bezeichnungen?

Wo genau steht das in der zur Diskussion stehenden Fassung?

Das Muster 'susan*' wird gesucht

Nein, es werden Dateinamen gesucht, die dem Muster entsprechen.

Ziemlich nerdig. Aber: Solche Anregungen werde sammeln und zu einem späteren Zeitpunkt gemeinsam einarbeiten.

Baustelle/find (Abschnitt „Dateien-bearbeiten“)

Die Überschrift finde ich sehr irreführend. Mit -exec werden Dateien ja nicht grundsätzlich "bearbeitet", sondern meist lediglich verwendet, oft auch nur deren Dateinamen. Auch geht es hier nur um die von find gefundenen Datei(nam)en. Also vielleicht so: "Mit gefundenen Dateipfaden arbeiten" oder "Gefundene Dateipfade (weiter)verwenden" oder "andere/externe Programme mit gefundenen Dateipfaden ausführen".

Ziemlich nerdig und ziemlich geschraubt gedacht und formuliert. Werde ich nicht berücksichtigen, da meine gewählte Überschrift genau das beschreibt, was hier Sache ist.

Im Artikel wird der Begriff "Glob" mehrfach verwendet. Ich denke, nicht jeder Leser weiß, was der bedeutet.

Ich Suche noch nach einem Link zu einer erklärenden Definition.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Danke für Deine Stellungnahme.

Das darfst Du auch, denn es kostete mich echt Mühe und Überwindung. Wundert es Dich nicht, warum hier sonst keiner mehr Lust hast, Feedback zu geben?

... sondern geradezu find missbraucht.

Wie definiert sich denn Missbrauch?

... wie bereits rklm in seiner direkten Antwort gezeigt hat.

Du halluzinierst, denn es gibt hier keine Antwort von rklm.

... in einer vandalistichen Aktion im Handstreich

Prof. Dr. Deutunghoheit hat gesprochen ❗

... ohne vorherige Diskussion

Wer frei von Sünde ist, werfe den ersten Stein ! ... siehe unten

  1. find "*.jpg" -exec convert {} -quality 80% klein/{} \; -exec touch -r {} klein/{} \; 
  2. find "*/01*.mp3" -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \; 
  3. find "*.flac" -print -exec bash -c 'read x<<<"{}"; ffmpeg -i "$x" -q 2 -c:v copy "${x/%.flac/.mp3}" 2>/dev/null && touch -r "$x" "${x/%.flac/.mp3}"' \; 

Ziemlich hinterhältig, diese Verschlimmbesserung mir anzuhängen.

Das, was Du gelöscht hast – ohne Begründung und ohne Diskussion – sah so aus:

find *.jpg -exec convert {} -quality 80% q80/{} \; -exec touch -r {} q80/{} \; 

find */01*.mp3 -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \; 

find *.flac -print -exec bash -c 'read x<<<"{}"; t=${x/%.flac/.mp3}; lame -V2 "$x" "$t" && touch -r "$x" "$t"' \; 

... und letzteres geht nochmal kürzer:

find *.flac -print -exec sh -c 'x="{}"; t=${x/%.flac/.mp3}; lame -V2 "$x" "$t" && touch -r "$x" "$t"' \; 

Ziemlich nerdig und ziemlich geschraubt

Das sagt der richtige 🤣

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

UlfZibis schrieb:

[…]

... sondern geradezu find missbraucht.

Wie definiert sich denn Missbrauch?

Habe ich in meiner Antwort erläutert, z.B. ist Missbrauch die Verwendung eines Programms für Zwecke, für die es nicht gedacht wurde.

... wie bereits rklm in seiner direkten Antwort gezeigt hat.

Du halluzinierst, denn es gibt hier keine Antwort von rklm.

Du hast Deinen Beitrag in einem Thread im Forum verlinkt, in dem rklm direkt auf Deinen Beitrag geantwortet hat. Ich bezog mich natürlich in meiner Antwort auf den von Dir verlinkten Thread.

... in einer vandalistichen Aktion im Handstreich

Prof. Dr. Deutunghoheit hat gesprochen ❗

... ohne vorherige Diskussion

Du hast am 29. Juni 2025 den Artikel unter Missachtung der Wiki-Regeln verändert und diese drei Beispiele eingebracht, in welcher Form auch immer ist inzwischen irrelevant. Sie waren von Anfang an im Artikel sachlich fremd, weil ein Bezug zu find nur durch dessen Missbrauch entstand. Dein Tun habe ich blumig umschrieben.

[…]

  1. find "*.jpg" -exec convert {} -quality 80% klein/{} \; -exec touch -r {} klein/{} \; 
  2. find "*/01*.mp3" -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \; 
  3. find "*.flac" -print -exec bash -c 'read x<<<"{}"; ffmpeg -i "$x" -q 2 -c:v copy "${x/%.flac/.mp3}" 2>/dev/null && touch -r "$x" "${x/%.flac/.mp3}"' \; 

Ziemlich hinterhältig, diese Verschlimmbesserung mir anzuhängen.

Ich wollte Dir gar nichts anhängen.

Ich habe die Form zitiert, auf die Du verwiesen hast. Dabei ging es mir nicht um die konkrete Fassung (die mehrfach überarbeitet wurde), sondern um die von Anfang an unpassende Intention der Beispiele, die für diesen Artikel als sachlich fremd abzulehnen ist.

Aber vielleicht habe ich ja Deine Absicht nicht richtig verstanden und Du magst mir einmal explizit, kurz und knackig mitteilen, welche Eigenschaft von find Du denn mit Deinen 3 Beispielen vermitteln wolltest? Möglicherweise finden wir ja gemeinsam bessere Beispiele.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Zu 1: Das ist das bereits oben besprochene Beispiel.

Ich finde im Artikel kein Beispiel, wo die Verkettung von -exec gezeigt wird.

Zu 2: Das ist ähnlich zu bewerten wie 1. Die Aufgabe kann z.B. ohne find viel klarer gelöst werden, sogar als Einzeiler:

for x in */01*.mp3 ; do echo $x ; mediainfo "$x" | grep "^Bit rate" ; done

Das soll besser/unaufwendiger/klarer/kürzer sein als:

find */01*.mp3 -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \;

Ich hab' wohl was an den Augen.

Die Syntax von for-Schleifen ist also geläufig und klar ❓ Hinweis: Es gibt mindestens 4 verschiedene Grundvarianten davon. Der Vorschlag zwingt dazu, den nicht gerade kurzen Artikel über das Skripten erst mal studieren zu müssen.
Wenn man dann das Beispiel noch etwas abwandeln will, z.B. rekursiv Suchen oder ein weiteres Such-/Filterkriterium hinzufügen, ist man mit einer for-Schleife bestimmt erst recht besser bedient, als mit find. 😉
So betrachtet ist find ein völlig überflüssiges Programm, denn alles was find kann, lässt sich mit einer for-Schleife erledigen.
Somit ist find kein Missbrauch, sondern die in ein Programm gegossene Umsetzung einer for-Schleife. find macht genau das: In einer (for-)Schleife den Verzeichnisbaum abgrasen ... und für jeden Verzeichniseintrag do ...; ...; done; abarbeiten.

Zu 3: Auch das ist ähnlich, ich spare mir aber ausführliche Ausführungen.

... weil sie auf einem Standardsystem ohne Installation zusätzlicher Pakete gar nicht funktionieren.

Nicht Meckern, sondern ein besseres Beispiel zeigen.
Außerdem muss dann auch ein anderes Beispiel entfernt werden.

Der „Trick“ besteht in allen 3 Beispielen einfach im Missbrauch von find, um sich eine For-Schleife zu sparen und dann mit komplizierten Konstrukten die Probleme zu vermeiden, die man mit klarer Shell Syntax gar nicht hat.

Was ist denn an dem Konstrukt

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

komplizierter als an

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

Auch wie man das vorangestellte "./" in den Suchergebnissen vermeidet, […]

Aus diesem Grund habe ich es jetzt ja auch im Artikel thematisiert,

Daraus geht eben nicht hervor, dass

find *.mp3

die Abkürzung ist von

find . -maxdepth 1 -name "*.mp3" | while read x; do echo ${x/#.\//} ; done

... und dabei hab' ich noch das von Dir angeführte zusätzliche aber überflüssige -print weggelassen.

und es wird eine elegante Lösung mit den Sprachmitteln von find vorgestellt.

... die zudem, wie früher schon "gefeedbacked", falsch ist.

Es ist zwar etwas spät im Jahr, aber ich wünsche trotzdem viel Spaß beim Suchen des Ostereis!

Dito!

Diese Überlegungen sollten noch berücksichtigt werden.

Ich denke, diese Überlegungen habe ich berücksichtigt

Die für mich wichtigste Überlegung darin war, den Leser nicht schon zu Anfang des Artikels mit zu viel Stoff, vor allem mit den so gut wie nie gebrauchten Optionen, zu ermüden. Zumindest ich orientiere mich bei einem Artikel immer zuerst an Beispielen, die hier erst nach ein paar Metern erstmalig auftauchen.

bis auf den Wunsch nach „mit komplizierteren Beispielen die Mächtigkeit von find vor Augen führen“. Darüber habe ich länger nachgedacht und schließlich darauf verzichtet, da ja in der zitierten Dokumentation bereits solche Beispiel erläutert werden und – wie Du ja auch kritisierst – der Artikel bereits ziemlich lang ist.

Es lässt sich auch alles komplett ohne Beispiele erklären. Sie sind völlig überflüssig ... und meistens ja auch länger, als erklärender Text. 🤓

Wo genau steht das in der zur Diskussion stehenden Fassung?

OK, hattest Du schon korrigiert.

Ziemlich nerdig.

Ziemlich nervig, diese Seitenhiebe, Herr Prof. Dr. Deutungshoheit.

Ziemlich nerdig und ziemlich geschraubt gedacht und formuliert. Werde ich nicht berücksichtigen, da meine gewählte Überschrift genau das beschreibt, was hier Sache ist.

Wenn ich "Dateien bearbeiten" lese - vor allem im Inhaltsverzeichnis, denke ich: Den Abschnitt kann ich mir schon mal ersparen, denn Dateien bearbeiten weiß ich ja schon, wie das mit einem normalen Editor geht.

Weitere Details kann man dem Manual (Manpage) ...

Wie wär's statt dessen mit: Manual 🇬🇧, ... und wenn's unbedingt sein muss noch: (Manpage) ?
(Warum gibt obiger Interwiki-Link eigentlich lr=lang_en statt lr=lang_de vor?)

  1. oder man baut find in das Skript ein:

    # im Skript:
    find … -print |
    while read …
    do …
    done

Das soll also weniger Aufwand sein, sich erst mal in die Syntax von | und gleich 3 Anweisungen (1. while, 2. read, 3. do) einzuarbeiten? ... mal abgesehen von dem Aufwand mit (Dateierstellung, Benennung, Parametrierung, geeigneten Ablageort finden, Überlegungen zur Relativität von verwendeten Pfaden und deren Korrektur, chmod einstellen, etc.).

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Du hast Deinen Beitrag in einem Thread im Forum verlinkt, in dem rklm direkt auf Deinen Beitrag geantwortet hat. Ich bezog mich natürlich in meiner Antwort auf den von Dir verlinkten Thread.

Und der fragte genau nach einer Lösung mittels find, und eben nicht nach einem Skript. Insofern war die Antwort von rklm zwar nett, doch eben am Thema vorbei (Wollte mir ja die Arbeit mit dem Skripen ersparen). Das ist für Dich dann eine "Referenz" ? Außerdem war das dort nicht die einzige Antwort / Meinung und die wirkliche Frage von mir wurde ja auch noch genau so beantwortet, wie gestellt.

Du hast am 29. Juni 2025 den Artikel unter Missachtung der Wiki-Regeln verändert

Du meinst wohl die: Wiki/Referenz (Abschnitt „Bestehende-Artikel-ueberarbeiten“) Da steht: "bestehenden Artikel im größeren Umfang überarbeiten". Dass da schon das Ergänzen durch Beispiel drunter fällt, sollte man da vielleicht genauer erklären.

Sie waren von Anfang an im Artikel sachlich fremd,

Der ursprüngliche Autor und Pfleger des Artikels war da aber anderer Meinung, wie schon bei früheren Verbesserungen, die ich speziell in dem Artikel da schon seit Jahren einbringe.

Dabei ging es mir nicht um die konkrete Fassung (die mehrfach überarbeitet wurde), sondern um die von Anfang an unpassende Intention der Beispiele,

Aber für das Argument "zu langer Einzeiler" taugte sie schon.

die für diesen Artikel als sachlich fremd abzulehnen ist.

Aber Vorlagen, wie man Skripte programmiert, gehören sachlich hier rein.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

UlfZibis schrieb:

(Warum gibt obiger Interwiki-Link eigentlich lr=lang_en statt lr=lang_de vor?)

Hat sich erledigt, also:

Weitere Details kann man dem Manual (Manpage) ...

Wie wär's statt dessen mit: Manual, ... und wenn's unbedingt sein muss noch: (Manpage) ?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

UlfZibis schrieb:

[…] Ich finde im Artikel kein Beispiel, wo die Verkettung von -exec gezeigt wird.

Im Text zu Aktionen steht:

insbesondere kann man auch -exec mehrfach verwenden

Nach Deiner Ansicht

Es lässt sich auch alles komplett ohne Beispiele erklären. Sie sind völlig überflüssig ... und meistens ja auch länger, als erklärender Text

braucht es dafür kein Beispiel. In diesem konkreten Fall teile ich Deine Meinung.

[…]

for x in */01*.mp3 ; do echo $x ; mediainfo "$x" | grep "^Bit rate" ; done

Das soll besser/unaufwendiger/klarer/kürzer sein als:

find */01*.mp3 -print -exec sh -c 'mediainfo "{}" | grep "^Bit rate"' \;

Ja.

  • Besser:

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

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

  • Weniger Aufwand:

    • 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.

    • 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.

  • klarer: Auch hier gewinne ich, denn Programmschleife ist eine leichter zu verstehende Struktur als geschachtelte Programmaufrufe.

  • Kürzer: Die beiden Kandidaten sind als Programmtext gleich lang. Also unentschieden.

3:0 für mich.

[…] Der Vorschlag zwingt dazu, den nicht gerade kurzen Artikel über das Skripten erst mal studieren zu müssen.

S.o.: Mein Vorschlag setzt die Kenntnis der Shellbefehle voraus; Dein Vorschlag die Kenntnis von find und die Kenntnis der Shellbefehle. Deine Idee, beim Anwender die Kenntnis der Shellbefehle zu vermeiden, indem man den Shellbefehl find verwendet, ist logisch abenteuerlich.

Wenn man dann das Beispiel noch etwas abwandeln will, z.B. rekursiv Suchen […]

Deine Beispiele sind gerade so ausgesucht, dass nicht rekursiv gesucht werden muss, und deshalb kann find ja seine Fähigkeiten gar nicht nutzen und ist deshalb entbehrlich. Wenn rekursiv gesucht werden soll, ist das eine ganz andere Situation und find sehr gut geeignet.

So betrachtet ist find ein völlig überflüssiges Programm, denn alles was find kann, lässt sich mit einer for-Schleife erledigen.

Ja. Turing-vollständige Sprachen (wie eine POSIX-Shell) sind vollständig. Das heißt zwar, dass jedes lösbare Problem mit ihnen gelöst werden kann, aber das heißt nicht, das jedes lösbare Problem mit ihnen gut formuliert werden kann und auch nicht, dass es gut gelöst werden kann. In manchen Situationen sind Spezialisten wie find doch besser und darin besteht die Daseinsberechtigung von find. Find ist gut im rekursiven Durchsuchen von Dateihierarchien und für alles andere gibt es besseres.

[…]

Der „Trick“ besteht in allen 3 Beispielen einfach im Missbrauch von find, um sich eine For-Schleife zu sparen und dann mit komplizierten Konstrukten die Probleme zu vermeiden, die man mit klarer Shell Syntax gar nicht hat.

Was ist denn an dem Konstrukt

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

komplizierter als an

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

Siehe oben.

[…] Daraus geht eben nicht hervor, dass

find *.mp3

die Abkürzung ist von

find . -maxdepth 1 -name "*.mp3" | while read x; do echo ${x/#.\//} ; done

Das stimmt ja auch nicht. Die beiden Aufrufe von find arbeiten völlig anders, auch wenn sie dasselbe Ergebnis produzieren. Warum Du das Ergebnis per Pipe nochmal einließt und erneut ausgibst, verstehe ich nicht.

Richtig ist:

find *.mp3 

ist eine aufwendige Alternative zum simplen:

ls -1 *.mp3 

...

Genug! Ich breche das hier ab.

Fazit: Du magst Deine Programmiermethoden weiter anwenden, aber sie sind kein empfehlenswerten Vorbild, und deshalb gehören sie nicht in den Wiki-Artikel.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Diskussionsbeiträge wurden eingearbeitet.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

UlfZibis schrieb:

[…] Die für mich wichtigste Überlegung darin war, den Leser nicht schon zu Anfang des Artikels mit zu viel Stoff, vor allem mit den so gut wie nie gebrauchten Optionen, zu ermüden. Zumindest ich orientiere mich bei einem Artikel immer zuerst an Beispielen, die hier erst nach ein paar Metern erstmalig auftauchen.

Guter Punkt.

Ich habe mich dazu entschlossen, früh im Artikel, und zwar gleich unter Aufruf ein nicht triviales konkretes Beispiel als Appetizer aufzunehmen und daran den Aufbau eines Befehls an find zu veranschaulichen. Die Erklärung der Arbeitsweise folgt dann später.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Ich habe mich dazu entschlossen, früh im Artikel, und zwar gleich unter Aufruf ein nicht triviales konkretes Beispiel als Appetizer aufzunehmen und daran den Aufbau eines Befehls an find zu veranschaulichen. Die Erklärung der Arbeitsweise folgt dann später.

Ein gangbarer Kompromiss. Dennoch könnte der Leser denken, dass es SEHR WICHTIG ist, erstmal all die fast nie benötigten Optionen zu studieren, was ihn eben unnötig ermüden lassen würde.

Zumindest sollte der exotische Test -xdev dann auch erklärt werden. Das finde ich noch viel schlimmer, erst recht für ein einführendes Beispiel, als in einem Beispiel ganz am Ende mal ein Programm zu verwenden, dass standardmäßig nicht installiert ist.

Sonst aber im Prinzip ein schönes Beispiel, um die Mächtigkeit von find vorzuführen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

user_unknown schrieb:

[…]

  • gegen Ende mit komplizierteren Beispielen die Mächtigkeit von find vor Augen führen

In der Baustelle findest Du nun im Kapitel Beispiele zwei konkrete komplizierte Beispiele aus der Praxis. Entspricht das Deinen Wünschen?

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

In der Baustelle findest Du nun im Kapitel Beispiele zwei konkrete komplizierte Beispiele aus der Praxis. Entspricht das Deinen Wünschen?

Uih, da warst Du aber fleißig. Tolle Beispiele ... sind aber noch ein paar Typos drin.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

kB schrieb:

[…] Der Artikel […] ist deshalb nun in einer Baustelle.

Artikel ist wieder im Wiki.

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3351

kB schrieb:

Zu 2: Das ist ähnlich zu bewerten wie 1. Die Aufgabe kann z.B. ohne find viel klarer gelöst werden, sogar als Einzeiler:

for x in */01*.mp3 ; do echo $x ; mediainfo "$x" | grep "^Bit rate" ; done

Ich versuche gerade Deinen Vorschlag anzuwenden. Dabei fällt auf, dass der Code in der for-Schleife auch dann ausgeführt wird (und zwar mit dem nicht aufgelösten Glob), wenn es gar keine Datei gibt, die dem gesuchten Muster entspricht:

$ for x in */01*.mp3 ; do echo $x ; ls -l "$x" ; done
*/01*.mp3
ls: Zugriff auf '*/01*.mp3' nicht möglich: Datei oder Verzeichnis nicht gefunden

Mit find passiert das nicht:

$ find */01*.mp3 -print -exec sh -c 'ls -l "{}"' \;
find: ‘*/01*.mp3’: Datei oder Verzeichnis nicht gefunden

So würde ich sagen, Dein Vorschlag per for-Schleife ist buggy.
Wie kann denn die Ausführung in der Schleife verhindert werden, wenn gar keine passende Datei existiert?