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

x264 (h264 の特定の実装) ではなく h264 (エンコード標準) としてタグ付けされたものや、その他のバリエーションが多数見つかりました。

以下の検索を強化するにはどうすればいいですか?

「X265*」は含まれませんが、次の 1 つ以上が含まれます。

  • '264ビット'
  • '264 文字'
  • '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に置き換えます(または、 GNUまたは互換機能を使用している場合は を使用します)。[mM][kK][vV]-inamefind

zsh

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

関連情報