![如何在 find 命令中使用 (THIS=x OR THAT=Y) AND OTHER=Z](https://linux22.com/image/164711/%E5%A6%82%E4%BD%95%E5%9C%A8%20find%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%20(THIS%3Dx%20OR%20THAT%3DY)%20AND%20OTHER%3DZ.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*”,但包含以下一项或多项:
- '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]
-iname
find
和zsh
:
set -o extendedglob # best in ~/.zshrc
ConvertTo265.sh ./**/(#i)(*x265*~*[xh](.|)264*).mkv(D.)