find和grep命令这个但不是那个

时间:2011-09-02 05:26:45

标签: shell find grep

我正在尝试查找所有不是*.o (object)文件的文件,并将其存储在当前目录树的文件MyFile.lst中。

我是通过使用以下命令来完成的。

     #! /usr/bin/ksh
     find . -type f | grep -v "*.o" >> MyFile.lst

由于某种原因,它无法正常工作,请帮助我。

修改

find . -type f | grep -v '\.o$' >> MyFile.lst

好像在工作。任何评论/建议。(补充keith.layne更正)

3 个答案:

答案 0 :(得分:0)

您不需要grep

find . -type f  '!' -name '*.o' >> MyFile.lst

在grep中,搜索模式应该是正则表达式。因此,.$*具有特殊含义。

.  means match any character
$  means match the end of a line
X* means match X, zero or more times(greedy)

grep -v '\.o$'会将文件与.o扩展名匹配。 (你需要逃避.的字面含义。)

答案 1 :(得分:0)

您的编辑应该没问题...... $(我相信您知道)应与该行的结尾匹配。

但是,您应该进行一项更改:使用.转义\(通配符)。否则,您将匹配例如名为“Mo”的文件。

我认为(从快速测试中)grep*视为模式开头的文字。

您的脚本现在将是:

#! /usr/bin/ksh
find . -type f | grep -v '\.o$' >> MyFile.lst

答案 2 :(得分:0)

find . -not -name "*.o" -type f >> list