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*"는 포함하지 않지만 다음 중 하나 이상을 포함합니다.

  • '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, -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.)

관련 정보