bash를 사용하여 비트 전송률이 320kbps를 넘는 모든 mp3 파일 나열

bash를 사용하여 비트 전송률이 320kbps를 넘는 모든 mp3 파일 나열

비트 전송률이 320보다 큰 모든 mp3 파일 목록을 얻고 싶습니다. EXIFtool -AudioBitrate 명령의 출력에 정규식을 적용하는 방법을 잘 모르겠습니다.

find . -type f -name '*.mp3' -print0 | while IFS= read -r -d '' i; do
   BITRATE=echo $(exiftool -AudioBitrate "$i")| grep -q '#([0-9]+) kbps#';
   if $BITRATE > 320
      then echo $BITRATE "$i"
   fi
done

답변1

이것은 유효한 bash 스크립트입니다. 기본적으로 이것은 약간의 조정 후에 얻을 수 있는 것입니다:

#!/bin/bash
set -o pipefail

find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do
    BITRATE=$(exiftool -AudioBitrate "$file" | grep -Eo '[0-9]+ kbps' | sed 's/ kbps//')
    if [[ $? -eq 0 ]] && [[ $BITRATE -ge 320 ]]; then
        echo $BITRATE "$file"
    fi
done

$BITRATE변수를 설정할 때 exiftool파이프를 통해 직접 실행하고 이를 사용하여 $(...)출력을 캡처합니다. 그런 다음 조건에서 Bash의 숫자 비교 연산자를 사용하여 exiftool-> 파이프라인이 성공적인지, 비트 전송률이 충분히 높은지 확인합니다.grep

.mp3이름에 공백이 있는 파일을 포함하여 내가 가지고 있는 임의의 파일을 처리할 수 있는지 확인했습니다 .

답변2

이 모든 도구가 필요하지 않습니다 ...

exiftool -q -if '$AudioBitrate > 320' -p '$AudioBitrate $Directory/$Filename' -ext mp3 -r .

exiftool 현재 디렉터리에서 반복적으로 검색하여 확장자를 가진 파일만 검색하고 mp3조건이 충족되면 비트 전송률과 파일 이름을 인쇄합니다.$AudioBitrate > 320

답변3

간단하고 게으른 방법:

#!/bin/bash

bitrateMin=320
find . -iname '*.mp3' -print0 |
  while IFS= read -r -d '' file; do
    [[ $(exiftool -AudioBitrate "$file" | awk -v br="$bitrateMin" '$4 >= br{print $4}') ]] && printf '%s\n' "$file"
done

관련 정보