Berlin_1946 schrieb:
user_unknown schrieb:
So sinnlos ist das nicht.
Wenn man prüfen will, ob die Datei foo älter als 7321 aber jünger als 7327 Tage ist, kann man das mit find sehr gut machen, oder man eine mehr oder weniger wilde Kombination anderer Kriterien, die man mit find testen will; evtl. zielt man auch auf eine der -exec-Varianten ab.
Was hat das vorgenannte jetzt mit der Änderung bzw. mit der aktuellen Diskussion zu tun?
Es gibt für find eine Menge Parameter/Optionen/Argumente, die man übergeben kann. Das erste, wenn es nicht von einem Spiegelstrich begleitet ist, ist der Startpunkt (oder einer der Startpunkte, wenn mehrere angegeben werden).
Der Artikel erklärt die meisten Argumente nicht in Kombination mit anderen, denn bei 30x30 Argumenten kommt man auf 900 Kombinationen, bei 30! Kombinationen auf noch mehr, manche davon sind auch noch reihenfolgesensibel und dürfen mehrfach verwendet werden (-mtime +7320 -mtime -7328).
Dass find foo
ohne andere Argumente beschrieben wird heißt nicht, dass es nicht in Kombination mit anderen Argumenten bedacht werden soll. Das Kommando find foo
für sich mag nicht sehr sinnvoll aussehen, wenn foo eine einfache Datei ist, aber in Kombination mit anderen Argumenten kann es doch sinnvoll sein, eine Datei zu suchen, z.B. wenn Du nicht 7 oder 70 sondern 70000 Dateien in einem Verzeichnis hast, wenn Du nicht nur eine suchst, sondern mehrere Dutzend, wenn die Suche Teil eines automatisiert laufenden Scripts ist, wenn andere Parameter benutzt werden (Alter, Größe, Besitzer, ...) und die Frage gar nicht ist, ob eine Datei da ist, sondern ob sie diesen Kriterien entspricht, die nicht trivial mit ls -l foo
ablesbar sind.
Hier wurden nie über die Punkt "alte, jünger und/oder Tage" diskutiert.
Jetzt wird es.
Das versehe ich leider auch nicht, wie du das meinst Datei foo
.
Wenn es um den Befehl find foo
geht, dann muss foo
ein Verzeichnis im aktuellen Verzeichnis sein.
Ordinäre Dateien haben meist, aber nicht immer, eine Dateiendung. Unter Linux ist alles eine Datei (bzw. unter unixoiden Systemen), auch ein Verzeichnis, sowie symbolische Links, Sockets und mehr. Müsste foo
ein Verzeichnis sein, dann stünde das auch in der Manpage. Die Manpage scheut vor dem Begriff Verzeichnis nicht zurück sondern verwendet ihn extensiv und bemüht sich auch nicht um einen literarischen Stil, bei dem man Wiederholungen eher vermeidet. Es muss also einen Grund geben, wieso von Startpunkten und nicht Startverzeichnissen die Rede ist.
| mate-hp@matehp-HP:~$ find foo
find: ‘foo’: Datei oder Verzeichnis nicht gefunden
mate-hp@matehp-HP:~$ ls -lauh| grep -i foo
-rw-rw-r-- 1 mate-hp mate-hp 14 Feb 13 09:54 foo.txt
mate-hp@matehp-HP:~$ find foo*
foo.txt
mate-hp@matehp-HP:~$
|
zu:
im Home, dem aktuellen Verzeichnis wird find foo
aufgerufen
nichts gefunden. Datei oder Verzeichnis nicht gefunden
die Zeilen 3 und 4 zeigen, es gibt eine Datei foo.txt
wenn Dateien gefunden werden sollen, dann ist das der Befehl find foo*
(siehe auch das Beispiel find Film*
in diesem Wiki)
Wie gesagt, die Startpunkte legen fest, wo gesucht wird, nicht was gesucht wird. Wenn aber alle Startpunkte Dateien sind, die, selbst wenn es Ziparchive o.ä. sind, nicht ihrerseits durchsucht werden, dann findet find nur diese Startpunkte und zeigt sie an.
Wenn es aber ein Verzeichnis gibt, das dem Muster Film*
entspricht, wird alles in dem Verzeichnnis und seinen Unterverzeichnissen gefunden, Film*
ist nur der Startpunkt.
Wenn Du wirklich nur auf der aktuellen Ebene und nicht in Unterverzeichnissen suchen willst, kannst Du das mit -maxdepth 1
einschränken. Wenn Du nach einer Datei namens foo
suchst also find -maxdepth 1 -name foo
, aber mit foo(Tab Tab)
bist Du sicher schneller, wenn es nur darum geht, ob die Datei da ist oder nicht. Oder ls -d foo
.
Das Wort "Verzeichnisse" (also Mehrzahl) ist aus meiner Sicht richtig , zeigt doch dieses andere Beispiel:
Das Wort war aber "Verzeichnisses".
find foo
sucht in foo im aktuellen Verzeichnisses.
Vielleicht hieß es mal
sucht in foo des aktuellen Verzeichnisses.
der Befehl find foo
zeigt:
mate-hp@matehp-HP:~$ find foo
foo # ist ein Verzeichnis im Home (~)
foo/foo1 # ist ein Verzeichnis im Verzeichnis `foo`
foo/foo1/foo1.txt # Datei im Verzeichnis `foo1`
foo/foo3.txt
foo/.~lock.foo.txt#
foo/foo2 # ist ein Verzeichns im Verzeichnis `foo`
foo/foo2/foo2.txt # Datei im Verzeichnis `foo2`
mate-hp@matehp-HP:~$
Find würde auch foo/bar/baz.txt finden, wenn Du find foo
eingibst, weil alle Dateien im Verzeichnis foo
dem Suchkriterium entsprechen.
Ins Verzeichnis foo
gewechselt,
Codemate-hp@matehp-HP:~/foo$ ls -lauh| grep -i foo
drwxrwxr-x 2 mate-hp mate-hp 4,0K Feb 13 10:23 foo1
drwxrwxr-x 2 mate-hp mate-hp 4,0K Feb 13 10:23 foo2
-rw-rw-r-- 1 mate-hp mate-hp 14 Feb 13 09:54 foo3.txt
-rw-rw-r-- 1 mate-hp mate-hp 79 Feb 13 09:54 .~lock.foo.txt#
mate-hp@matehp-HP:~/foo$
ist zu sehen, das es 2 Verzeichnisse gibt (gelb markiert).
Ja, und ein Verzeichnis bar1 wäre auch gefunden worden.
Ich erkenne bei:find foo
foo
muss ein Verzeichnis im aktuellen Verzeichnis sein. Der Startpunkt ist das Verzeichnis foo
in dem wird rekursiv nach allen Verzeichnissen und Daten gesucht die foo
enthalten.
Das ist falsch, und Du begehst den confirmation bias: Du suchst nur nach Belegen, die Deine These stützen. Du müsstest nach Belegen suchen, die Deine These falsifizieren - Du wärst überrascht, wie schnell sie falsifiziert ist!
Und noch ein Beispiel:
Auch das ist schlecht, weil es nicht widerlegt und so wie angelegt ist auch nicht widerlegen kann, dass der Startpunkt nur festlegt, wo gesucht wird, nicht was gesucht wird.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | t530:~/tmp 🐧> mkdir test
t530:~/tmp 🐧> cd test
t530:~/tmp 🐧> mkdir foo bar
t530:~/tmp/test 🐧> touch {foo,bar}"/"{foo,baz}
t530:~/tmp/test 🐧> tree
.
├── bar
│ ├── baz
│ └── foo
└── foo
├── baz
└── foo
2 directories, 4 files
t530:~/tmp/test 🐧> find foo
foo
foo/foo
foo/baz
|
Erklärung: Der Startpunkt ist foo, und alles darin wird gefunden, inklusive des Startpunktes selbst und der Datei baz.
In bar wird nichts gefunden, auch foo nicht. Erklärung: Da wird gar nicht gesucht.
Sry aber diesen Zusammenhang kann ich leider nicht in diesem Satz
- sucht in foo im aktuellen Verzeichnis.-
erkennen, auch wenn ich vorher Startpunkt gelesen habe.