Ed X: Einen Linux Konsolenbefehl erklären

Hi,

ich will gerade mal Balsa2(z.Zt extrem unstable, so "be warned!") ausprobieren.
Dazu muss ich meine Sylpheed-Mailbox(mh ähnlich) in ein "richtiges" mh-Mailbox-
format konvertieren. Was dem Sylpheed format fehlt, ist eine .xmhcache datei in
jedem Unterverzeichnis. Das könnte man von Hand erledigen, aber wie war das, der
Mensch ist kreativ faul. Beim googlen bin ich da über folgenden, sehr effektiven
Einzeiler gefallen ->
find . -type d -exec touch "{}"/.xmhcache ;
, der auch klasse funktioniert. Allerdings bin ich mit Befehlsreferenz lesen und
anderen Dingen nicht wirklich dahinter gestiegen, wie dieses Konstrukt rekursiv
durch mein Mailverzeichnis latscht und überalll eine .xmhcache Datei fallen lässt.
Könnte mir bitte jemand diese Befehl erklären?

Dankend,
bye eddie

  1. Hallo!

    ich bin auch kein Fachman, was ich aus man find schließe:

    find . -type d -exec touch "{}"/.xmhcache ;

    find
    der Kommandozeilen Befehl -> also man find nachgucken

    .
    steht vermutlich für den Pfad, also aktuelles Verzeichnis

    -type d
    heißt nur Verzeichnisse finden

    -exec
    heißt einen Kommandozeilenbefehl ausführen

    touch
    der auszuführende Kommandozeilenbefehl -> man touch
    wenn ich das nicht ganz falsch verstehe wird hier die Datei .xmhcache angelegt wenn sie nichtz existiert, sonst mit dem aktuellen Timestamp versehen. "{}"/ steht so wie ich das versthe für das aktuelle Verzeichnis, was das \ am Ende escapen soll verstehe ich aber nicht mehr.

    Vermutlich steht die Lösung hier, aber ich verstehe es nicht 100%ig:

    -exec command ;
                  Execute command; true if 0 status is returned.  All
                  following arguments to find are taken to  be  argu-
                  ments  to  the command until an argument consisting
                  of ;' is encountered.  The string {}' is replaced
                  by the current file name being processed everywhere
                  it occurs in the arguments to the command, not just
                  in arguments where it is alone, as in some versions
                  of find.  Both of these constructions might need to
                  be  escaped  (with a `') or quoted to protect them
                  from expansion by the shell.  The command  is  exe-
                  cuted in the starting directory.

    Wenn das ganze rekursiv laufen soll, versuch es mal mit der option -depth, aber sicher bin ich nicht. Das können Dir aber andere sicher besser sagen!

    Grüße
    Andreas

  2. Hallo

    find . -type d -exec touch "{}"/.xmhcache ;

    ich versuchs mal:

    find                 |finde...
    .                    |im aktuellen Verzeichnis und allen darunterliegenden
    -type d              |Einträge vom Typ Verzeichnis
    -exec                |führe bei jedem Treffer folgendes aus (bis zum abschließenden ; - Find-Syntax):
    touch                |Zeitstempel einer Datei aktualisiseren; Datei ggf. anlegen
    "{}"/.xmhcache       |{} ist das Fundergebnis -> ergibt in jedem Unterverzeichnis eine solche Datei
    ;                   |Befehlsende; siehe -exec

    Schönen Gruß

    Rainer

    1. Hallo

      find . -type d -exec touch "{}"/.xmhcache ;

      ich versuchs mal:

      find                 |finde...
      .                    |im aktuellen Verzeichnis und allen darunterliegenden
      -type d              |Einträge vom Typ Verzeichnis
      -exec                |führe bei jedem Treffer folgendes aus (bis zum abschließenden ; - Find-Syntax):
      touch                |Zeitstempel einer Datei aktualisiseren; Datei ggf. anlegen
      "{}"/.xmhcache       |{} ist das Fundergebnis -> ergibt in jedem Unterverzeichnis eine solche Datei
      ;                   |Befehlsende; siehe -exec

      Wie ist das denn Deiner Meinung nach mit Rekursivität? sollte doch mit -deapth funkitonieren, oder liege ich da falsch?

      Grüße
      Andreas

      1. Hi,

        find                 |finde...
        .                    |im aktuellen Verzeichnis und allen darunterliegenden

        .....................................................^^^^^^^^^^^^^^^^^^^^^^^^^^^

        Wie ist das denn Deiner Meinung nach mit Rekursivität? sollte doch mit -deapth funkitonieren, oder liege ich da falsch?

        da habe ich mich vielleicht missverständlich ausgedrückt, der Einzeiler ist gut so
        wie er ist, denn er _funktioniert bereits rekursiv_ . So wie ich es jetzt
        verstanden habe, erledigt das der Punkt hinter dem find

        bye eddie

        1. Hallo!

          find                 |finde...
          .                    |im aktuellen Verzeichnis und allen darunterliegenden
          .....................................................^^^^^^^^^^^^^^^^^^^^^^^^^^^

          Wie ist das denn Deiner Meinung nach mit Rekursivität? sollte doch mit -deapth funkitonieren, oder liege ich da falsch?

          da habe ich mich vielleicht missverständlich ausgedrückt, der Einzeiler ist gut so
          wie er ist, denn er _funktioniert bereits rekursiv_ . So wie ich es jetzt
          verstanden habe, erledigt das der Punkt hinter dem find

          der Punkt steht nur für das aktuelle Verzeichnis, vermutlich ist das dann bei find standardmäßig so eingestellt das rekursiv gesucht wird!

          Danke für den Hinweis!

          Grüße
          Andreas

          1. Hallo!

            find                 |finde...
            .                    |im aktuellen Verzeichnis und allen darunterliegenden
            .....................................................^^^^^^^^^^^^^^^^^^^^^^^^^^^

            Wie ist das denn Deiner Meinung nach mit Rekursivität? sollte doch mit -deapth funkitonieren, oder liege ich da falsch?

            da habe ich mich vielleicht missverständlich ausgedrückt, der Einzeiler ist gut so
            wie er ist, denn er _funktioniert bereits rekursiv_ . So wie ich es jetzt
            verstanden habe, erledigt das der Punkt hinter dem find

            der Punkt steht nur für das aktuelle Verzeichnis, vermutlich ist das dann bei find standardmäßig so eingestellt das rekursiv gesucht wird!

            Danke für den Hinweis!

            Grüße
            Andreas

            1. Hi,

              da hat mir wohl eben Mozilla einen kleinen Streich gespielt, sorry.
              Wollte nur sagen, daß es genauso ist, wie Andreas vermutet hat:
              Standard ist das rekursive Abarbeiten aller Unterverzeichnisse,
              und (unter Linux) kann man mit -maxdepth die Tiefe der Rekursion einschränken.
              Was jetzt -depth genau bewirkt, weiß ich auch nicht; auf jeden Fall wäre der von Ed genannte Befehl so auch auf anderen Unixen lauffähig. Dagegen sind diverse Optionen wie z.B. maxdepth AFAIK nur in der GNU-Version eingebaut.

              Schönen Gruß aus Bilk

              Rainer

  3. Hallo,

    Ja, danke an euch. Richtig lernen werde ich es wohl nur wenn ich es noch ein
    paar mal ausprobiere...

    bye eddie