Как вывести список файлов командой FIND?

Задача: вывести файлы с расширением jpg и png, но исключить в пути/имени к файлу edit и 200x200

Если не использовать расширения, то работает:
$find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*"

Если не использовать регулярное выражение, то работает:
$find /var/www/test -type f ! -name "*.jpg" -o -name "*.png"

Если совместить reget и пару name, то выводит не верно:
$find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" -name "*.jpg" -o -name "*.png"

Как быть?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
$find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" -name "*.jpg" -o -name "*.png"

Операции в строке условий find имеют приоритеты, приоритет "или" ниже чем приоритет "и". У вас получилось "(тип -- файл, и не *edit* или *200x200*, и *.jpg) или *.png".

Как быть?

Добавить скобок:
find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" \( -name "*.jpg" -o -name "*.png" \)


Если не использовать регулярное выражение, то работает:
$find /var/www/test -type f ! -name "*.jpg" -o -name "*.png"

...но совсем не так, как должно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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