2011-09-02 49 views
0

我试图找到所有这些都不是*.o (object)文件,并存储在文件MyFile.lst在当前目录树中的文件。发现和grep命令这一点,但不是

我从使用以下命令这样做。

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

由于某种原因,它不工作,请帮助我。

编辑:

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

好像工作。任何意见/建议。(加keith.layne校正)

回答

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扩展匹配的文件。 (您的字面含义您需要转义.)。

+0

同意,一个简单的情况下,这样你并不需要所有的'grep'的善良。对于大文件树,你的版本应该更快,对吧? –

+0

我不知道'ksh',但它可能是值得一提的(任何未来的观众)的''需要在'bash' – carlpett

+0

@carlpett逃逸:你是对的。 –

0

你的编辑应罚款... $(我敢肯定你知道)应与行的末尾。

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

我认为(从快速测试),其grep治疗*作为文字在模式的开始。

你的脚本现在将是:

#! /usr/bin/ksh 
find . -type f | grep -v '\.o$' >> MyFile.lst 
0
find . -not -name "*.o" -type f >> list