비트 전송률이 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