Mein Freund hat mir gesagt, dass man mit dem Schalter -r arbeiten kann, um Dateien rekursiv in Verzeichnissen und Unterverzeichnissen zu finden. Bitte sagen Sie mir den Fehler in der angegebenen Anweisung, es funktioniert nicht
find / -type f -r -name "abc.txt"
Antwort1
Der Grund, warum es nicht funktioniert, ist, dass find keine -r
Option hat. Es stimmt zwar, dass das -r
Flag für viele Programme „rekursiv“ bedeutet, aber das ist nicht bei allen der Fall und auch nicht bei find
. Die Aufgabe von find
ist es, nach Dateien und Verzeichnissen zu suchen, es kommt nicht sehr oft vor, dass Sienichtmöchte, dass es rekursiv ist.
Sie können die Optionen der meisten Programme mit dem man
Befehl überprüfen. Beispiel: man find
. Da das Handbuch von find sehr umfangreich ist, möchten Sie dort möglicherweise nach der -r
Option suchen:
$ man find | grep -w -- -r
Das -- weist grep lediglich an, das Lesen von Optionen zu beenden. Ohne dieses Zeichen würde -r als Option an grep übergeben. Sie können auch innerhalb der Manpage suchen, indem Sie auf klicken, den /
Suchbegriff eingeben und dann die Eingabetaste drücken.
Dieser Befehl gibt nichts zurück. Vergleichen Sie ihn mit diesem, der das Handbuch von durchsucht cp
:
$ man cp | grep -w -- -r
-R, -r, --recursive
Da find
es immer rekursiv ist, verfügt es über die Umkehrung, ein Flag, mit dem Sie auswählen können, in wie viele Unterverzeichnisse es absteigen soll:
-maxdepth levels
Descend at most levels (a non-negative integer) levels of direc‐
tories below the command line arguments. -maxdepth 0
means only apply the tests and actions to the command line
arguments.
-mindepth levels
Do not apply any tests or actions at levels less than levels (a
non-negative integer). -mindepth 1 means process all files
except the command line arguments.
Wenn Sie also Zweifel an einem Befehl haben, lesen Sie die man
Seite dazu, denn Sie wissen nie, was eine bestimmte Option bewirken könnte. Beispiel:
$ man sort | grep -w -- -r
-r, --reverse
$ man mount | grep -w -- -r,
-r, --read-only
$ man awk | grep -A 8 -w -- -r
-r
--re-interval
Enable the use of interval expressions in regular expression
matching (see Regular Expressions, below). Interval expressions
were not traditionally available in the AWK language. The POSIX
standard added them, to make awk and egrep consistent with each
other. They are enabled by default, but this option remains for
use with --traditional.
$ man sed | grep -w -- -r
-r, --regexp-extended
$ man xterm | grep -w -- -r
-r This option indicates that reverse video should be simulated by
swapping the foreground and background colors.
Du hast die Idee.
Antwort2
find
ist bereits rekursiv, Sie brauchen nicht die-r