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つ以上が含まれています。

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

これはGNUism(-and、、/ )を対応する標準項目に置き換えます(-notまたはデフォルトであるため、何もしません)。-print0xargs -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.)

関連情報