![Как использовать (THIS=x OR THAT=Y) AND OTHER=Z с командой find](https://rvso.com/image/164711/%D0%9A%D0%B0%D0%BA%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20(THIS%3Dx%20OR%20THAT%3DY)%20AND%20OTHER%3DZ%20%D1%81%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BE%D0%B9%20find.png)
Я конвертирую свою видеотеку из 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.)