到目前为止,我已经做到了这一点:
prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt
但是,扩展名为 .ori、.pte、.uh 和 .mna 的文件仍会显示。
最好将排除项留给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)$'
单程:
find path/to/project *.* -type f ! \( -name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \)
| xargs dos2unix 2> log.txt