如何在 find 命令中使用 (THIS=x OR THAT=Y) AND OTHER=Z

如何在 find 命令中使用 (THIS=x OR THAT=Y) AND OTHER=Z

我使用以下命令将视频库从 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*”,但包含以下一项或多项:

  • 'x264'
  • '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 {} +

这里将您的 GNUisms ( -and, -not, -print0/ xargs -0) 替换为它们的标准等效项(-a或者什么也不做,因为这是默认的,!, -exec cmd {} +)。

如果您想不区分大小写地匹配扩展名,则替换mkv为(或者如果使用 GNU或兼容版本则使用)。[mM][kK][vV]-inamefind

zsh

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

相关内容