查找grep排除dos2unix的某些文件名
到目前为止,我已经做到了这一点:查找grep排除dos2unix的某些文件名,grep,find,dos2unix,Grep,Find,Dos2unix,到目前为止,我已经做到了这一点: prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt 但是,扩展名为.ori、.pte、.uh和.mna的文件仍然会出现。最好将排除留在查找中,请参见Birei的答案 您的grep模式的问题是您将其指定为shell glob。默认情况下,grep期望基本正则表达式(BRE)作为其第一个参数。因此,如果您将gre
prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt
但是,扩展名为.ori、.pte、.uh和.mna的文件仍然会出现。最好将排除留在
查找中,请参见Birei的答案
您的grep
模式的问题是您将其指定为shell glob。默认情况下,grep
期望基本正则表达式(BRE)作为其第一个参数。因此,如果您将grep模式替换为:*\。\(ori\|pte\|uh\|mna\)$
,它应该可以工作。或者,如果希望使用扩展正则表达式(ERE),可以使用-E
启用它们。然后您可以这样表示相同的排除:*\(ori | pte | uh | mna)$
完整命令行:
find . -type f | grep -vE '.*\.(ori|pte|uh|mna)$'
单向:
find path/to/project *.* -type f ! \( -name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \)
| xargs dos2unix 2> log.txt
这些都没用,我想知道为什么。grep不是只做文件名吗?@Sassinak:你到底运行了什么命令?所有grep
看到的都是find
列出的文件名,如果其中没有包含换行符,则每行一个。因此,不存在“仅文件名”依赖关系。顺便说一句,您希望匹配行尾,因此模式应该以$
锚定,我将把它添加到答案中。好的,添加了更改,它工作得非常好。我更喜欢这个,因为它“更短”,但上面的答案也适用。谢谢