我有一个简单的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。
答案 0 :(得分:1)
egrep -i error *
*
元字符与任何文件名匹配。目录也是文件。 *
由shell扩展为当前目录中的任何和所有文件,这通常称为globbing。
set noglob
关闭了这种行为。但是,您的目录中不太可能存在名为*
的文件,因此在此示例中,该命令不会找到任何类型的文件。 BTW - 不要创建一个名为*
的文件来测试它,因为名为*
的文件可能会导致各种有趣和不需要的事情发生。想想当你试图删除文件时会发生什么? rm '*'
将是正确的命令,但如果你或其他人不假思索地rm *
那么你就会遇到问题......