Pregunta

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.

¿Fue útil?

Solución

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)$'

Otros consejos

One way:

find path/to/project *.* -type f ! \( -name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \) 
  | xargs dos2unix 2> log.txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top