如果我进入/etc/apache2/
并输入,grep -rl 'LoadModule php' ./*
那么我只会看到./mods-available/php7.0.load
。如果我更改r
为,R
那么我会看到
./mods-available/php7.0.load
./mods-enabled/php7.0.load
这两个都是普通目录。我希望-r
grep 能够递归 PWD 中的所有文件/目录。发生了什么-r
?我打算-R
现在就一直使用。
答案1
根据grep 的手册页:
-r,——递归
递归读取每个目录下的所有文件,仅当符号链接在命令行上时才遵循它们。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这相当于 -d recurse 选项。-R, --dereference-recursive
递归读取每个目录下的所有文件。与 -r 不同,跟踪所有符号链接。
例子:
我有一个文件夹测试其中有一个文件1.txt。2.txt是指向1.txt这样输出ls -l test
看起来就像:
-rw-r--r-- 1 kulfy kulfy 15 Jun 12 21:53 1.txt
lrwxrwxrwx 1 kulfy kulfy 5 Jun 12 21:53 2.txt -> 1.txt
的内容1.txt是:
This is a file.
如果我想搜索“文件”文件内的字符串测试文件夹然后运行:
grep "file" test
我会遇到一个错误:
grep: test: Is a directory
但如果我这么做:
grep -R "file" test
我得到一个输出:
test/2.txt:This is a file
test/1.txt:This is a file
另一方面,如果我运行:
grep -r "file" test
我得到输出:
test/1.txt:This is a file
这里,我没有明确提到要扫描所有文件。因此,当我使用R
标志时,符号链接(此处2.txt) 被尊重并生成了输出。但是当我使用r
标志时,符号链接被忽略了,因为我没有提到扫描2.txt还。
答案2
来自 GNU grepv2.11-8 及以上版本,如果调用-r
排除符号链接命令行中未指定,并在使用-R
(来源)。
-r
,--recursive
递归读取每个目录下的所有文件,仅当符号链接在命令行上时才遵循它们。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这相当于 -d recurse 选项。
-R
,--dereference-recursive
递归读取每个目录下的所有文件。跟踪所有符号链接,不像-r
。