Unix egrep查看文件夹信息?

时间:2012-07-09 16:45:07

标签: unix grep

我有一个简单的egrep命令,可以搜索当前目录中的所有文件,查找包含单词“error”的行:

egrep -i "error" * 

此命令也将遍历子目录。以下是整个文件夹的示例:

/Logfile_20120630_030000_ID1.log
/Logfile_20120630_030001_ID2.log
/Logfile_20120630_030005_ID3.log
/subfolder/Logfile_20120630_031000_Errors_A3.log
/subfolder/Logfile_20120630_031001_Errors_A3.log
/subfolder/Logfile_20120630_031002_Errors_A3.log
/subfolder/Logfile_20120630_031003_Errors_A3.log

顶层目录中的日志文件包含“错误”行。但是“子文件夹”目录中的日志文件不包含带有“错误”的行。 (仅限文件名)

所以我得到的问题是egrep命令似乎正在查看“子文件夹”中的信息。我的结果得到了一个似乎是二进制块的块,然后是包含顶层文件夹日志文件中“错误”一词的文本行。

如果我删除了“子文件夹”下面的所有文件,但没有删除文件夹本身,我会得到完全相同的结果。

Unix是否将文件历史信息保存在文件夹中?

运行时纠正了问题: 找 。 -type f | egrep -i“错误”*

但我仍然不明白为什么这是一个问题。我在SunOS上运行C-shell。

1 个答案:

答案 0 :(得分:1)

egrep -i error *

*元字符与任何文件名匹配。目录也是文件。 *由shell扩展为当前目录中的任何和所有文件,这通常称为globbing。

set noglob

关闭了这种行为。但是,您的目录中不太可能存在名为*的文件,因此在此示例中,该命令不会找到任何类型的文件。 BTW - 不要创建一个名为*的文件来测试它,因为名为*的文件可能会导致各种有趣和不需要的事情发生。想想当你试图删除文件时会发生什么? rm '*'将是正确的命令,但如果你或其他人不假思索地rm *那么你就会遇到问题......