我的朋友告诉我,可以使用 -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