grep -R(大写)和 -r(小写)之间的区别

grep -R(大写)和 -r(小写)之间的区别

如果我进入/etc/apache2/并输入,grep -rl 'LoadModule php' ./*那么我只会看到./mods-available/php7.0.load。如果我更改r为,R那么我会看到

./mods-available/php7.0.load
./mods-enabled/php7.0.load

这两个都是普通目录。我希望-rgrep 能够递归 PWD 中的所有文件/目录。发生了什么-r?我打算-R现在就一直使用。

答案1

根据grep 的手册页

-r,——递归
               递归读取每个目录下的所有文件,仅当符号链接在命令行上时才遵循它们。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这相当于 -d recurse 选项。

-R, --dereference-recursive
               递归读取每个目录下的所有文件。与 -r 不同,跟踪所有符号链接。

例子:

我有一个文件夹测试其中有一个文件1.txt2.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(来源)。

手册页 ( man grep)

-r--recursive 递归读取每个目录下的所有文件,仅当符号链接在命令行上时才遵循它们。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这相当于 -d recurse 选项。

-R--dereference-recursive 递归读取每个目录下的所有文件。跟踪所有符号链接,不像-r

相关内容