Как использовать (THIS=x OR THAT=Y) AND OTHER=Z с командой find

Как использовать (THIS=x OR THAT=Y) AND OTHER=Z с командой find

Я конвертирую свою видеотеку из x264 в x265, используя следующее:

Он ищет x264 в любом месте имени файла, но исключает те, которые начинаются с x265, поскольку это файлы, которые были завершены.

sudo find /mnt/local/int001/media/TV/ -name '*x264*.mkv' -and -not -name 'X265*.mkv' -print0 | xargs -0 /usr/local/bin/ConvertTo265.sh

Я нашел много тегов, которые помечены как h264 (стандарт кодирования), а не как x264 (конкретная реализация h264), а также другие вариации.

Как мне улучшить свой поиск:

НЕ содержит «X265*», но содержит ОДНО или несколько из следующих:

  • 'х264'
  • 'h264'
  • 'ч.264'

решение1

find /mnt/local/int001/media/TV/ \
  \( -name '*[xXhH]264*.mkv' -o -name '*[xXhH].264*.mkv' \) \
  ! -name '*[xX]265*' -type f -exec /usr/local/bin/ConvertTo265.sh {} +

Здесь заменяем ваши GNUизмы ( -and, -not, -print0/ xargs -0) их стандартными эквивалентами ( -aили ничем, поскольку это значение по умолчанию, !, -exec cmd {} +).

Замените mkvна , [mM][kK][vV]если вы хотите, чтобы расширение также соответствовало регистру без учета (или используйте , -inameесли вы используете GNU findили совместимый).

С zsh:

set -o extendedglob # best in ~/.zshrc
ConvertTo265.sh ./**/(#i)(*x265*~*[xh](.|)264*).mkv(D.)

Связанный контент