Search code examples
grepfinddos2unix

find grep exclude some file names for dos2unix


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.


Solution

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