Найти grep исключить некоторые имена файлов для dos2unix

До сих пор я получил это далеко:

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

Однако файлы с расширениями.ori, .pte, .uh и.mna по-прежнему отображаются.

2 ответа

Решение

Лучше оставить исключение для findсм. ответ Бирей.

Проблема с вашим grep шаблон заключается в том, что вы указали его как глобус оболочки. По умолчанию 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
Другие вопросы по тегам