如何在 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.)

相關內容