2012-07-09 46 views
0

我有一个简单的egrep的命令,通过在当前目录中的所有文件搜索包含单词“错误”行:Unix egrep查看文件夹信息?

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 

顶部目录中的日志文件包含“error”行。但“子文件夹”目录中的日志文件不包含带有“错误”的行。 (只在文件名中)

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

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

那么Unix是否在一个文件夹内保存文件历史信息?

该问题已通过运行修正: 查找。 -type f | egrep -i“error”*

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

回答

1
egrep -i error * 

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

set noglob 

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

+0

感谢您的答复。我看到egrep如何将目录当作文件来对待。我只是好奇究竟究竟是怎样追踪历史的。 – 2012-07-13 18:43:33

+0

我也注意到,当你有一个包含文件的目录,然后删除它下面的所有文件时,目录文件大小不会改变。我猜这是我上面提到的同样的历史信息。我想了解更多关于它如何在Unix中工作的信息。我用inode指针猜测它的东西,但我认为删除文件时删除了这些指针。 ??? – 2012-07-13 18:45:53

+0

这些文件确实被删除了(如果没有更多链接,这些文件将被释放);没有保存专用的文件历史记录信息,只是将目录条目标记为空闲,而名称不会被覆盖,所以它们会保留在目录文件中,直到重新使用条目。 – Armali 2014-04-02 13:30:41