Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix egrep查找文件夹信息?_Unix_Grep - Fatal编程技术网

Unix egrep查找文件夹信息?

Unix egrep查找文件夹信息?,unix,grep,Unix,Grep,我有一个简单的egrep命令,可以在当前目录中的所有文件中搜索包含单词“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_0310

我有一个简单的egrep命令,可以在当前目录中的所有文件中搜索包含单词“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
顶部目录中的日志文件包含“错误”行。但是“subfolder”目录中的日志文件不包含带有“error”的行。(仅在文件名中)

因此,我遇到的问题是,egrep命令似乎正在查看“子文件夹”中的信息。我的结果得到一个看起来像是二进制块的块,然后是包含顶部文件夹日志文件中“error”一词的文本行

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

那么Unix是否将文件历史记录信息保存在文件夹中

通过运行以下命令解决了此问题: 找到-类型f | egrep-i“错误”*

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

egrep -i error *
*
元字符匹配任何文件名。目录也是文件<代码>*由shell扩展到当前目录中的任何和所有文件中,这通常称为globbing

set noglob

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

感谢您的回复。我看到了egrep是如何将目录视为一个文件的。我只是好奇到底是什么记录了历史。我还注意到,当你有一个包含文件的目录,然后删除它下面的所有文件时,目录文件大小不会改变。我猜这和我上面提到的历史信息是一样的。我想进一步了解它在Unix中的工作原理。我猜它和inode指针有关,但我认为这些指针是在文件被删除时被删除的???文件确实被删除了(如果没有更多链接,索引节点也会被释放);没有保存专门的文件历史记录信息,只是目录条目仅标记为空闲,而名称不会被覆盖,因此它们将保留在目录文件中,直到重复使用这些条目。
set noglob