Como usar (THIS=x OR ISSO=Y) AND OTHER=Z com o comando find

Como usar (THIS=x OR ISSO=Y) AND OTHER=Z com o comando find

Estou convertendo minha videoteca para x265 de x264 usando o seguinte:

Ele procura x264 em qualquer lugar do nome do arquivo, mas exclui qualquer um que comece com x265, pois esses são os arquivos que foram concluídos.

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

Encontrei muitos marcados como h264 (padrão de codificação) em vez de x264 (implementação específica de h264), bem como outras variações.

Como posso melhorar minha pesquisa por:

NÃO contém 'X265*', mas contém UM ou mais dos seguintes:

  • 'x264'
  • 'h264'
  • 'h.264'

Responder1

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 {} +

Aqui, substituindo seus GNUisms ( -and, -not, -print0/ xargs -0) por seus equivalentes padrão ( -aou nada, pois é o padrão, !, -exec cmd {} +).

Substitua mkvpor [mM][kK][vV]se desejar corresponder a extensão também sem distinção entre maiúsculas e minúsculas (ou use -inamese estiver usando GNU findou compatível).

Com zsh:

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

informação relacionada