Sorry, offenbar hätte ich meine Änderung hier erst vorstellen und redigieren lassen sollen.
Nö. Wenn kein Einwand kommt hast Du doppelte Arbeit, aber wenn Du gleich Änderungen machst sieht man, wie es im Zusammenhang aussieht. Man kann alte u. neue Version vergleichen.
Gleich in die vollen gehen ist schon das richtige, mein ich.
Bevor Du große Änderungen machst, deren Annahme zweifelhaft ist, und wo Du Dich ärgerst, wenn die Arbeit vernichtet wird, die würde ich vorab zur Diskussion stellen.
Sucht man einen Verzeichnisnamen, der in einem Verzeichnisbaum öfters vorkommt, kommt man mit '-name' nicht weiter. Der Parameter '-path' ist hier die Lösung, denn er interpretiert die Zeichen '/' und '.' nicht.
1
find -path "*Geschichte/Hausarbeiten*"findet '~/Uni/Geschichte/Hausarbeiten' aber nicht '~/Uni/Mathematik/Hausarbeiten'.
Ich finde die erste Aussage unklar. Ist es ein Problem, dass mehr Verzeichnisse gefunden werden als man sucht? Geht es um Verzeichnisse wie /a/b/c/b/d mit dem selben Namen, mehrfach in einem Verzeichnisast oder um mehrere Verzeichnisse in verschiedenen Ästen: /a/aa/b /a/bb/b a/cc/b - das wird nicht klar.
Mein konkretes Problem war, dass in einem rsnaposhot-Backup-Verzeichnisbaum Verzeichnisse mehrfach gefunden werden sollten aber eben dennoch nur bestimmte. Ich kam mit -name, -mindepth und -maxdepth auch sehr weit, bis ich ~/Desktop löschen wollte:
1 2 3 4 5 6 7 8 DS209> find -name "Desktop" -type d -mindepth 5 -maxdepth 5 -depth ./20131020-1030/PC-1/home/USER/Desktop ./20131020-1030/Daten/Projekte/Grafik/Desktop ./20131106-1830/Daten/Projekte/Grafik/Desktop ./20131107-1330/Daten/Projekte/Grafik/Desktop ./20130728-1530/PC-1/home/USER/Desktop ./20130728-1530/Daten/Projekte/Grafik/Desktop ./20131030-1030/Daten/Projekte/Grafik/DesktopMeine Überarbeitung:
Sucht man mit Verzeichnisnamen, in denen ein Slash '/' vorkommt, kommt man mit '-name' nicht weiter. Der Parameter '-path' ist hier die Lösung, denn er erlaubt die Interpretation des Zeichens '/'.
find -path "*2013/J*"findet '~/fotos/2013/Juni' und '~/musik/2013/Juli' aber nicht '~/dokumente/2013-Juni'.
Kann ein Verzeichnisname überhaupt (unter Linux) ein '/' enthalten? Sind in Deinem Beispiel die Verzeichnisnamen nicht eigentlich 'fotos', '2013', 'Juni' usw? Genau deshalb findet -name mit '*2013/J*' ja nichts.
Im engeren Sinne kann ein Verzeichnis keinen Slash enthalten, außer man betrachtet den ganzen Pfad als Verzeichnisnamen, und ja, das will die manpage sagen.
In der man-page von find heisst es:
-path __pattern__ File name matches shell pattern __pattern__. The metacharacters do not treat `/' or `.' specially; so, for example, find . -path "./sr*sc" will print an entry for a directory called `./src/misc' (if one exists).
Das Problem ist also, wenn man die Unterscheidung Verzeichnis-, Datei- und Pfadname beiseite lässt, dass man etwas sucht, was einen Slash enthält. Vom unwahrscheinlichen Fall abgesehen, dass man etwas suchen würde, was es nicht geben kann. Und dass es in Deinem Fall etwas mit mehreren Objekten mit solch Namen zu tun hat war ein Zufall - im Kern ist es nicht eine Frage der Anzahl.
Das gleiche "Problem" hat mkdir:
1 2 3 USER@RECHNER:~$ mkdir a/d b/d mkdir: das Verzeichnis »a/d“ kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden mkdir: das Verzeichnis »b/d“ kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
Das halte ich nicht für das gleiche Problem.
1 | mkdir d d/a d/b d/a/a |
Das Elternverzeichnis für a muss existieren, bevor d/a erzeugt werden kann.