1

Мне нужны файлы, заканчивающиеся на «.pdf» или «.png»; вот моя попытка:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*[pdf|png]'

это неправильно включает файлы, оканчивающиеся на "Apdf", "Zpdf" и т. д. (отсутствует буквальная точка перед расширением файла)

Я попытался настроить шаблон так:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'

но тогда результаты не возвращаются. Спасаясь с обратной косой чертой не работает. Зачем?

[0] $ uname -a

Darwin Robottinosino.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

Спасибо!

6 ответов6

5

Вместо этого вы можете просто использовать что-то вроде \( -name '*.pdf' -or -name '*.png' \) если у вас нет другой причины для сопоставления с регулярным выражением.

3

Проблема не в точке. Это скобки. Квадратные скобки определяют класс персонажа; Я вполне уверен, что вы пытаетесь сделать чередование. Для этого вам нужны круглые скобки. Для этого вам нужно использовать расширенное регулярное выражение, поэтому команда выглядит так:

find -E /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.(pdf|png)'

Этот флаг -E является BSDism (OS X имеет в основном пользовательскую область BSD). В GNU find вы вместо этого говорите -regextype posix-extended , как выражение, а не как флаг (согласно комментарию Денниса Уильямсона , что, несомненно, правильно).

2

Модель [pdf|png] соответствует любому из символов в квадратных скобках (включая трубы).

Попробуй это:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.\(pdf\|png\)'
0
find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'
0

Вы должны использовать -name *.pdf а не .*[pdf|png] .
Ваше регулярное выражение будет соответствовать .Apdf .Zpng и т.д.

Вы можете попробовать это:
find . -type f | egrep '.pdf$|.png$'

0

Это должно подойти:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regextype posix-egrep -regex '.*\.(pdf|png)'

Если ваша версия find не знает о -regextype posix-egrep , вы можете попробовать это вместо этого:

find /Users/robottinosino/Desktop/_PublishMe_ -type f '.*\.\(pdf\|png\)'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .