我正在尝试查找所有不是*.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更正)
答案 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