Wie kann ich Verzeichnisse durchsuchen, die mit einem bestimmten Buchstaben beginnen?

10

Wie kann ich mit dem Linux-Befehl find nach Verzeichnissen suchen, die mit einem bestimmten Buchstaben beginnen?

Zum Beispiel möchte ich alle Verzeichnisse, die mit dem Buchstaben beginnen, anach einer Datei oder einem Verzeichnis durchsuchen, die mit beginnen b.

bing
quelle

Antworten:

13

Versuchen Sie einen Fund in einem Fund:

finden . -type d -name "a *" -exec find {} -name "b" \;

Ab dem aktuellen Verzeichnis ( .) sucht find nach allen Verzeichnissen, die rekursiv mit dem Buchstaben a beginnen. Für jedes gefundene Verzeichnis wird nach einer Datei mit dem Namen b gesucht.

Wenn Sie nur möchten, dass es in den Ordnern angezeigt wird, die mit a beginnen , und keine Verzeichnisse in diesen a * -Ordnern, verwenden Sie maxdepth:

finden . -Typ d -name "a *" -exec find {} -maxdepth 1 -name "b" \;

um Fehler loszuwerden:

finden . -typ d -name "a *" 2> / dev / null -exec find {} -maxdepth 1 -name "b" \;
John T.
quelle
nix the -type fon the interior find- Die Frage von OP zeigt an, dass "b" eine Datei oder ein Verzeichnis sein kann.
Quacksalber Quijote
Ja, ich hatte diesen Teil im Sinn, also habe ich nur ein Dateibeispiel gemacht. Wenn ich den Typ entferne, werden unter anderem auch symbolische Links angezeigt, die er nicht möchte - falls es zufällig einen mit dem Namen "b" gibt.
John T
Nun , er gibt nicht an, keine Symlinks zu wollen, also würde ich die gegenteilige Annahme machen - aber wir haben jetzt auf die Einschränkungen hingewiesen, damit er sich selbst entscheiden kann. :)
Quacksalber Quijote
Richtig, auf diese Weise wird mein Befehl auch nicht umbrochen.
John T
1

Nur ein kurzes Update für Leute, die sich mit dieser Frage befassen könnten.

Zusätzlich zu der von John T bereitgestellten Lösung habe ich auch festgestellt, dass Sie Verzeichnisse mit dem Bereinigungsschalter ausschließen können (ich denke, die Manpages sollten früher gelesen werden, hehe.)

Wenn ich zum Beispiel alle Verzeichnisse nach Datei oder Verzeichnis "b" durchsuchen möchte, mit Ausnahme von Verzeichnissen, die mit einem "a" beginnen, kann ich dies tun

find . -path 'a*' -prune -o -name "b" -print

bing

bing
quelle
1

Sie können auch find -regex verwenden ...

find -regex .*/a.*/b
user23307
quelle