найти имена файлов, НЕ заканчивающиеся в определенных расширениях на Unix?

Существует ли простой способ рекурсивно найти все файлы в иерархии каталогов, которые не заканчиваются в списке расширений? Например, все файлы, которые не являются *.dll или *.exe

UNIX/GNU находит, мощный, как это, кажется, не имеет exclude режим (или я пропускаю его), и мне всегда было трудно использовать регулярные выражения для нахождения вещей, которые не соответствуют конкретному выражению.

Я нахожусь в среде Windows (использующий порт GnuWin32 большинства инструментов GNU), таким образом, я одинаково открыт для решений только для Windows.

195
задан jww 1 July 2019 в 01:09
поделиться

4 ответа

Или без ( и необходимость избежать его:

find . -not -name "*.exe" -not -name "*.dll"

, а также исключить список каталогов

find . -not -name "*.exe" -not -name "*.dll" -not -type d

или в положительной логике; -)

find . -not -name "*.exe" -not -name "*.dll" -type f
322
ответ дан 23 November 2019 в 05:21
поделиться
find . ! \( -name "*.exe" -o -name "*.dll" \)
44
ответ дан 23 November 2019 в 05:21
поделиться
$ find . -name \*.exe -o -name \*.dll -o -print

Первые две опции -name не имеют опции -print, поэтому они пропускаются. Все остальное печатается.

8
ответ дан 23 November 2019 в 05:21
поделиться

Вы можете сделать что-нибудь с помощью команды grep:

find . | grep -v '(dll|exe)$'

Флаг -v на grep конкретно означает «найти то, что не " не соответствует этому выражению."

4
ответ дан 23 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: