Ich muss alle Dateien finden (oder genauer gesagt, zählen), die diesem Muster entsprechen:
*/foo/*.doc
Wobei das erste Platzhalter-Asteriskus eine variable Anzahl von Unterverzeichnissen einschließt.
Ich muss alle Dateien finden (oder genauer gesagt, zählen), die diesem Muster entsprechen:
*/foo/*.doc
Wobei das erste Platzhalter-Asteriskus eine variable Anzahl von Unterverzeichnissen einschließt.
Mit gnu find können Sie Regex verwenden, die (im Gegensatz zu -name
) den gesamten Pfad abgleichen:
find . -regex '.*/foo/[^/]*.doc'
Um nur die Anzahl der Dateien zu zählen:
find . -regex '.*/foo/[^/]*.doc' -printf '%i\n' | wc -l
(Der %i
Formatcode bewirkt, dass find
die Inode-Nummer anstelle des Dateinamens ausgibt; im Gegensatz zum Dateinamen ist die Inode-Nummer garantiert keine Zeichen wie ein Zeilenumbruch zu haben, so dass das Zählen zuverlässiger ist. Vielen Dank an @tripleee für den Vorschlag.)
Ich weiß allerdings nicht, ob das auf OSX funktioniert.
Wie wäre es mit:
find BASE_OF_SEARCH/*/foo -name \*.doc -type f | wc -l
Was dies macht:
Der Vorteil dieser Methode:
UPDATE: Möchten Sie eine variable Tiefe? okay:
find BASE_OF_SEARCH -name \*.doc -type f | grep foo | wc -l
Optional könnten Sie Ergebnisse filtern, die "foo" im Dateinamen haben, weil dies diese auch zeigt.
Auf der Grundlage der Antworten auf dieser Seite konnte ich auf anderen Seiten folgendes zusammenstellen, wobei in dem aktuellen Ordner und allen darunter liegenden Ordnern nach allen Dateien gesucht wird, die die Erweiterung pdf haben, gefolgt von einer Filterung für diejenigen, die test_text im Titel enthalten.
find . -name "*.pdf" | grep test_text | wc -l
Ungetestet, aber probiere es aus:
find . -type d -name foo -print | while read d; do echo "$d/*.doc" ; done | wc -l
Finde alle "foo"-Verzeichnisse (in unterschiedlichen Tiefen) (das ignoriert Symlinks, falls das Teil des Problems ist, können sie hinzugefügt werden); verwende Shell-Globbing, um alle ".doc"-Dateien zu finden, und zähle sie dann.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.