Solaris-Äquivalent für Tiefe / Pflaume?

10

Ich versuche, einige Dateien in einem Verzeichnis zu finden. Standardmäßig commanddurchsucht der Fund das von mir angegebene Verzeichnis und seine Unterverzeichnisse.

Ich habe versucht, depth/maxdepthund zu verwenden prune, aber nichts hat dazu beigetragen, dies zu überwinden. Kann jemand den richtigen Weg für die Verwendung von Tiefe / Beschneidung in Solaris aufzeigen?

Mein Code sieht folgendermaßen aus:

find file_path -depth 1 -name '*.log'

Ich erhalte die folgende Fehlermeldung:

find: bad option 1
find: [-H | -L] path-list predicate-list
user295338
quelle

Antworten:

15

Sie verwechseln zwei nicht verwandte Optionen mit vage ähnlichen Namen:

  • -depthnimmt kein Argument. Wenn vorhanden, findwird der Inhalt eines Verzeichnisses verarbeitet, bevor das Verzeichnis selbst verarbeitet wird.
  • -maxdepth N (wobei N eine ganze Zahl ist) begrenzt die Rekursion auf N Ebenen von Unterverzeichnissen.

Die -maxdepthOption ist eine Erweiterung, die in einigen Versionen von findSolaris enthalten ist, nicht jedoch in Solaris. Es gibt einen Trick, nur Standardoptionen zu verwenden find, um ein Verzeichnis ohne Rekursion zu verarbeiten: Verwenden Sie es -prunefür Unterverzeichnisse, schließen Sie jedoch das Verzeichnis der obersten Ebene aus. Da die einzige Möglichkeit, mit dem Verzeichnis der obersten Ebene übereinzustimmen, der Name ist, müssen Sie den Namen festlegen .(der niemals der Name eines Unterverzeichnisses sein wird).

find /directory/to/traverse/. -name . -o \
                              -type d -prune -o \
                              -name '*.log' -print
Gilles 'SO - hör auf böse zu sein'
quelle
Ich stand vor genau diesem Problem und diese Lösung half. Ich habe einen Tag lang versucht, eine Lösung zu finden, um dies zum Laufen zu bringen. Grrr, Solaris.
Kevin Teljeur
Haben Sie ein Problem mit sed beim Entfernen des Verzeichnisses /./ find $ {directory} / sh /? -Name . -o -typ d -prune -o -print | sed 's /\/\.\//\//'
Ethan Post
@EthanPost Sie können das tun, aber Implementierungen ohne finden -mindepthund -maxdepthsind eine verschwindende Rasse. Wenn Ihr Fund hat -maxdepth, verwenden Siefind /directory/to/traverse -mindepth 1 -maxdepth 1 -name '*.log'
Gilles 'SO - hör auf böse zu sein'
@ Gilles Nimmt nur einen, um Sie zu brechen, wenn Sie ein Framework erstellen, das unter solchen Umständen ausgeführt werden muss! Dieser Markt könnte eines Tages mein Brot und Butter sein! Danke für die Hilfe.
Ethan Post