Einen Linux Konsolenbefehl erklären
Ed X
- programmiertechnik
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
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
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
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
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
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
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
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
Hallo,
Ja, danke an euch. Richtig lernen werde ich es wohl nur wenn ich es noch ein
paar mal ausprobiere...
bye eddie