0

我有一个简单的 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是否将文件历史信息保存在文件夹中?

问题已通过运行得到纠正: find 。-类型 f | egrep -i "错误" *

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

4

1 回答 1

1
egrep -i error *

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

set noglob

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

于 2012-07-10T12:51:54.963 回答