Мой друг сказал мне, что можно использовать ключ -r для рекурсивного поиска файлов в каталогах и подкаталогах. Пожалуйста, укажите мне ошибку в данном операторе. Это не работает.
find / -type f -r -name "abc.txt"
решение1
Причина, по которой это не работает, в том, что find не имеет -r
опции. Хотя верно, что для многих программ флаг -r
означает «рекурсивный», это не относится ко всем, и это не относится к find
. Работа find
заключается в поиске файлов и каталогов, не так часто, что вынехотим, чтобы это было рекурсивно.
Вы можете проверить параметры большинства программ с помощью man
команды. Например, man find
. Поскольку руководство по find огромно, вы можете поискать в нем параметр -r
:
$ man find | grep -w -- -r
-- просто говорит grep прекратить чтение опций, без него -r будет передан как опция grep. Также вы можете выполнить поиск на странице руководства, нажав , /
затем написав то, что вы хотите найти, затем введите.
Эта команда ничего не возвращает, сравните ее с этой, которая ищет в руководстве cp
:
$ man cp | grep -w -- -r
-R, -r, --recursive
Поскольку find
всегда рекурсивен, у него есть обратная сторона — флаг, позволяющий выбрать, в сколько подкаталогов он должен спускаться:
-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.
Итак, если у вас есть сомнения по поводу команды, прочитайте ее man
страницу, потому что вы никогда не знаете, что может сделать та или иная опция. Например:
$ 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.
Вы поняли.
решение2
find
уже рекурсивно, вам не нужно-r