在手册页中:
-r
以符号形式递归读取每个目录下的所有文件 仅当它们在命令行上时才链接。
“在命令行上”究竟是什么意思?
感谢。
答案 0 :(得分:4)
如果grep -r
在遍历目录时遇到符号链接,则不会跟踪它(与grep -R
相反)。如果您将符号链接作为参数提供给grep -r
,则会跟随它。
想象一下,你有一个包含大量文件的目录,其中一个包含指向..
的符号链接:
$ ls -la
total 0
drwxr-xr-x 2 aw aw 47 Mar 31 16:05 .
drwxr-xr-x 3 aw aw 27 Mar 31 16:04 ..
-rw-r--r-- 1 aw aw 0 Mar 31 16:05 bar
-rw-r--r-- 1 aw aw 0 Mar 31 16:05 baz
lrwxrwxrwx 1 aw aw 2 Mar 31 16:04 foo -> ..
-rw-r--r-- 1 aw aw 0 Mar 31 16:05 quux
$
有了这个
grep -r foobar .
只会grep此目录中的文件grep -r foobar foo
将grep父目录(..
)中的文件(在命令行上给出符号链接),grep -R foobar .
也将grep父目录中的文件(在命令行上给出符号链接 not ,但在遍历时找到)。答案 1 :(得分:2)
如果您还查看man grep
:
-r, - recursive
以符号形式递归读取每个目录下的所有文件 仅当它们在命令行上时才链接。这相当于 -d recurse选项。
-R, - dereference-recursive
以递归方式读取每个目录下的所有文件。 关注所有人 符号链接,不像-r。
查看示例:
我们在/test
内创建一个包含内容
$ cat /test/a
Ping info
Hello
然后我创建了一个符号链接:
$ ln -s /test/a /test/dir/b
看起来像:
$ ls -l /test/dir
b -> ../a
现在我们grep
:
$ grep -r Ping /test/dir/* #does NOT follow the symlink to ../a
a:Ping info
$ grep -R Ping /test/dir/* #DOES follow the symlink to ../a
a:Ping info
dir/b:Ping info