Wie verwende ich den Befehl „Find“, um allgemein beschreibbare Dateien in einem Verzeichnis aufzulisten, ohne in Unterverzeichnisse zu navigieren?

Wie verwende ich den Befehl „Find“, um allgemein beschreibbare Dateien in einem Verzeichnis aufzulisten, ohne in Unterverzeichnisse zu navigieren?

Die Lösung für dieses Problem ist mir seit Wochen ein Rätsel. Ich versuche, einen Befehl zu schreiben, der nur allgemein beschreibbare Dateien in einer bestimmten Gruppe von Verzeichnissen findet, ohne in irgendwelche Unterverzeichnisse zu wechseln -prune.

Ich habe eine Vielzahl verschiedener Optionen ausprobiert, aber am Ende blieb nur

find / -type f -perm -2

Dies führt jedoch immer noch zu Durchbrüchen in den Unterverzeichnissen. Mit dem Befehl

find / -prune -type f -perm -2

bringt auch keine Ergebnisse. Was mache ich hier falsch?

Antwort1

Versuchen Sie stattdessen Folgendes maxdepth N:

-Maximale Tiefenebenen
Steigen Sie maximal um die Ebenen (eine nicht negative Ganzzahl) der Verzeichnisse unterhalb der Startpunkte ab. -maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf die Startpunkte selbst angewendet werden.

find $FOLDER -maxdepth 1 -perm -2

Antwort2

find / -type f -perm -2

Das ist rekursiv. Das ist es, was findbewirkt.

find / -prune -type f -perm -2

Hier weisen Sie an, auf alles findanzuwenden, -prunewas es findet. Die Bedingungen und Aktionen werden von links nach rechts verarbeitet. Da vor keine Bedingung steht -prune, wird es bedingungslos angewendet. Das erste findgefundene Objekt, nämlich das Befehlszeilenargument /, wird also -prunedarauf angewendet und finddurchläuft daher nicht den Inhalt des Verzeichnisses. Da /die folgenden Bedingungen nicht erfüllt sind, wird es nicht gedruckt.

Um nur die Einträge des Toplevel-Verzeichnisses zu verarbeiten, müssen Sie sich -prunean die Verzeichnisse wendenaußer den Kommandozeilenargumenten. Die portable Möglichkeit hierfür besteht darin, /.am Ende des in der Befehlszeile übergebenen Pfads zu verwenden. Dies führt dazu, finddass ihr Name als behandelt wird ., sodass Sie sie mit vergleichen können -name .. Bei einer rekursiven Durchquerung wird nie eine Datei aufgerufen, .da dieser Name reserviert ist. Nun gibt es drei verschiedene Fälle:

  • Oberstes Verzeichnis: rekursiv.
  • Anderes Verzeichnis: nicht rekursiv.
  • Normale Datei, die für alle beschreibbar ist: Drucken.

Um mehrere unterschiedliche Verhaltensweisen anzugeben, verwenden Sie den -oOperator („oder“). Es gilt das erste Verhalten, bei dem alle Bedingungen zutreffen.

find /. -name . -o -type d -prune -o -type f -perm -2 -print

Einige Versionen findermöglichen Ihnen das Schreiben find / -name / -o -type d -prune -o …, andere nicht (z. B. BusyBox).

Einige Versionen von findunterstützen Optionen -mindepthund -maxdepthzur Einschränkung der rekursiven Durchquerung. Wenn Ihr Find dies unterstützt, können Sie dies anstelle von verwenden -prune.

find / -mindepth 1 -maxdepth 1 -type f -perm -2

( -mindepthund -maxdepthsind globale Optionen, der Teil mit den Bedingungen und Aktionen ist -type f -perm -2mit dem impliziten nachstehenden -print.)

verwandte Informationen