1

到目前为止,我已经做到了这一点:

prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt

但是,扩展名为 .ori、.pte、.uh 和 .mna 的文件仍会显示。

4

2 回答 2

1

最好将排除项留给find,请参阅 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)$'
于 2013-05-15T13:19:31.997 回答
1

单程:

find path/to/project *.* -type f ! \( -name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \) 
  | xargs dos2unix 2> log.txt
于 2013-05-15T13:21:25.167 回答