如果我进入/etc/apache2/并输入,grep -rl 'LoadModule php' ./*那么我只会看到./mods-available/php7.0.load. 如果我r改为R然后我会看到
./mods-available/php7.0.load
./mods-enabled/php7.0.load
Run Code Online (Sandbox Code Playgroud)
这两个都是普通目录。我希望-r让 grep 递归 PWD 中的所有文件/目录。怎么回事-r?我想-R在这一点上总是使用。
Kul*_*lfy 10
根据grep 的联机帮助页:
-r, --recursive
以递归方式读取每个目录下的所有文件,仅当它们位于命令行上时才遵循符号链接。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这等效于 -d 递归选项。-R, --dereference-recursive 递归
读取每个目录下的所有文件。与 -r 不同,遵循所有符号链接。
例子:
我有一个文件夹test,其中有一个文件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
Run Code Online (Sandbox Code Playgroud)
1.txt的内容为:
This is a file.
Run Code Online (Sandbox Code Playgroud)
如果我想在测试文件夹内的文件中搜索“文件”字符串并运行:
grep "file" test
Run Code Online (Sandbox Code Playgroud)
我会遇到一个错误:
grep: test: Is a directory
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
grep -R "file" test
Run Code Online (Sandbox Code Playgroud)
我得到一个输出:
test/2.txt:This is a file
test/1.txt:This is a file
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我运行:
grep -r "file" test
Run Code Online (Sandbox Code Playgroud)
我得到输出:
test/1.txt:This is a file
Run Code Online (Sandbox Code Playgroud)
在这里,我没有明确提到要扫描所有文件。因此,当我使用R标志时,符号链接(此处为2.txt)受到尊重并生成输出。但是当我使用rflag 时,符号链接被忽略了,因为我没有提到也扫描2.txt。
从 GNU grep v2.11-8 及更高版本开始,如果使用-r 排除在命令行中指定的符号链接进行调用,并在使用-R( source )调用时包含它们。
-r,--recursive递归读取每个目录下的所有文件,仅当它们在命令行上时才遵循符号链接。请注意,如果没有给出文件操作数,grep 将搜索工作目录。这等效于 -d 递归选项。
-R,--dereference-recursive递归读取每个目录下的所有文件。遵循所有符号链接,与-r.
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |