Найти 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