LINUX.ORG.RU

find файлов с разными расширениями... Почему не так работает: find . -type f -iname «*jpg» -or -iname «*mp4» -or -iname «*avi» -print ?

 


0

1

приветствую.

Форум ругается на длинный заголовок.

Заголовок: find файлов с разными расширениями... Почему не так работает: find . -type f -iname «*jpg» -or -iname «*mp4» -or -iname «*avi» -print ? (выводятся лишь *avi)

Никак не совладаю с задачами...

Сначала решил просто выбрать файлы с расширениями, но указанный в заголовке запрос выдаёт лишь файлы последнего расширения.
Как получить все указанные расширения?

Может кто ещё подскажет какой командой можно получить список расширений в дереве каталогов?

Задача: Есть дерево графических файлов картинки+видео. База большая, собиралась много лет на многих устройствах и могут быть совершенно разные расширения. Не хочется что то потерять - потому для начала получить список расширений и из него делать скрипт по выбору для определенного диапазона дат и заливке в облако в представлении yy/mm/* всей базы...

Мне пока не удалось нагуглить решения...

★★★
man find
.......
       expr1 -o expr2
              Or; expr2 is not evaluated if expr1 is true.

       expr1 -or expr2
              Same as expr1 -o expr2, but not POSIX compliant.

....
imb ★★
()
   OPERATORS
       Listed in order of decreasing precedence:

       ( expr )
              Force precedence.  Since parentheses are special to the shell, you will normally need to quote them.   Many
              of the examples in this manual page use backslashes for this purpose: `\(...\)' instead of `(...)'.

       ! expr True if expr is false.  This character will also usually need protection from interpretation by the shell.

       -not expr
              Same as ! expr, but not POSIX compliant.

       expr1 expr2
              Two  expressions  in a row are taken to be joined with an implied "and"; expr2 is not evaluated if expr1 is
              false.

       expr1 -a expr2
              Same as expr1 expr2.

       expr1 -and expr2
              Same as expr1 expr2, but not POSIX compliant.

       expr1 -o expr2
              Or; expr2 is not evaluated if expr1 is true.

       expr1 -or expr2
              Same as expr1 -o expr2, but not POSIX compliant.

       expr1 , expr2
              List; both expr1 and expr2 are always evaluated.  The value of expr1 is discarded; the value of the list is
              the  value  of  expr2. The comma operator can be useful for searching for several different types of thing,
              but traversing the filesystem hierarchy only once.  The -fprintf action can be used  to  list  the  various
              matched items into several different output files.

Зачем or? Почему не запятая?

stave ★★★★★
()
Ответ на: комментарий от stave

Почему не запятая?

The value of expr1 is discarded; the value of the list is the value of expr2.

futurama ★★★★★
()

А так работает?

find . -type f -iname "*jpg" -print -or -iname "*mp4" -print -or -iname "*avi" -print

find . -type f -iname "*jpg" -or -iname "*mp4" -or -iname "*avi"

justAmoment ★★★★★
()
Ответ на: А так работает? от justAmoment

А так работает?

Нет. Будет искать, например, и каталоги с именами «*avi»

vodz ★★★★★
()
Ответ на: комментарий от stave

в скобки надо брать \( ... \)

Да, методом тыка на найденное гуглом - нашел решение уже после сообщения... но каков механизм этих скобок?
Я конечно его нагуглю, но в данном треде это будет дополнение к ответу. Пока я не понял что такое скобки - ну разве только математическое действие группировки. Но почему они по отдельности не группируются а в скобка группируются? Или по умолчанию идёт операция ^ и лишь скобками можно её переопределить в |?

n0mad ★★★
() автор топика
Ответ на: комментарий от stave

expr1 -o expr2
Or; expr2 is not evaluated if expr1 is true.

Я так понимаю что:

find . -type f -iname «*jpg» -or -iname «*mp4» -or -iname «*avi»

На файле вася.mp4 первое утверждение ложно, второе истинно и оно должно отработаться - но мы этот файл не видим. Видим лишь петя.avi и его выбираем...
Не понимаю почему... Если бы только *jpg отрабатывались я ещё мог бы понять, но почему последнее выражение?

n0mad ★★★
() автор топика

Первую часть решения со скобками я нагуглил.
Нужно ещё решение: Как получить список расширений файлов в дереве? Мне надо узнать какие типы медиафайлов там у меня есть. А то там 950Gb собиравшихся последние 10 лет, более ранние к сожалению ушли в небытиё во время одного из дизастеров. Должно быть что то на дисках, но Путинские прихвостни сделали меня БОМЖом и многое потеряно...

n0mad ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.