如何根据(flac)元数据删除文件?

如何根据(flac)元数据删除文件?

我有几个文件夹包含 FLAC 24/96 和 16/44.1 文件。

我想删除 24 位/96 KHz 文件,但保留其他文件。如何从命令行执行此操作?有没有办法按元数据系统地对文件进行排序,然后将该列表与 一起使用rm

答案1

为了完整起见,值得一提的是,在Puddletag,按所需条件排序,然后标记并删除所需的文件。这可能是更安全甚至比定制或编写全新的脚本更快(参见:xkcd 1205 - 值得花时间吗?)。


您可以使用metaflac手册页) 用于 flac 文件。

$ metaflac --show-sample-rate --show-bps "somefile.flac"
44100
16

当然,这不是完整的脚本。你可能需要看一下高级 Bash 脚本指南

以下是一个非常基本的脚本,它会删除所有返回上述命令的文件4410016目录作为参数提供给脚本(例如flac-44100-removal.sh "Music/All music with 44.1kHz/"

#!/bin/bash
IFS=$'\n'

for file in $(find "${1}" -name "*.flac");
do
    if [ "$(metaflac  --show-sample-rate "$file")" = "44100" ]; then
        if [ "$(metaflac  --show-bps "$file")" = "16" ]; then
            rm -i "$file"
        fi
    fi
done

metaflac 的替代品有:vorbiscomment用于 ogg、AtomicParsley用于 mp4/m4a、mid3v2用于 mp3 或mediainfo用于所有内容,但它们都有不同的输出,并且 mediainfo 具有过度可定制性。

相关内容