so far I have gotten this far:

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

However, the files with extensions .ori, .pte, .uh and .mna still show up.

有帮助吗?

解决方案

It is better to leave the excluding to find, see Birei's answer.

The problem with your grep pattern is that you have specified it as a shell glob. By default grep expects basic regular expressions (BRE) as its first argument. So if you replace your grep pattern with: .*\.\(ori\|pte\|uh\|mna\)$ it should work. Or if you would rather use extended regular expressions (ERE), you can enable them with -E. Then you can express the same exclusion like this: .*\.(ori|pte|uh|mna)$.

Full command-line:

find . -type f | grep -vE '.*\.(ori|pte|uh|mna)$'

其他提示

One way:

find path/to/project *.* -type f ! \( -name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \) 
  | xargs dos2unix 2> log.txt
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top