我想获取比特率 >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