我最近一直在尝试一些不同的音乐播放器,并注意到我的一些(很多)音乐会从库中丢失。事实证明,在某些时候,我的大量音乐文件丢失了它们的 .mp3/.ogg/.flac 文件扩展名。老实说,我不确定这是怎么发生的,但我确信这是我错误地做的事情(或者我认为这无关紧要,因为文件扩展名无论如何都是装饰性的)。
所以我需要取回这些文件扩展名。我研究了 pyrenamer,但我不知道如何将它与没有扩展名的文件匹配,然后告诉它根据文件的实际类型添加正确的文件扩展名。
我也看过 EasyTag。但是,它也可以完全根据文件扩展名识别音乐文件。所以我想要修复的音乐甚至没有出现。杰出的。
关于如何做到这一点的任何想法?我当然不介意一些命令行,我只是不确定哪种工具最好,而且我也很讨厌正则表达式。
这是一个 bash 脚本,它根据猜测的格式重命名传递给它的文件。它要求
file
通过查看前几个字节中的特征模式来确定格式。file -i
打印行,例如/path/to/file: type/subtype
wheretype/subtype
is a MIME type。然后,该脚本将扩展名与已知类型相关联,并将文件重命名为具有扩展名。已经具有扩展名的文件将被单独保留。具有无法识别类型的文件将被单独保留。该脚本将在覆盖目标文件之前进行提示。将脚本另存为
~/bin/rename-based-on-content-type
(或您喜欢的任何内容)并使其可执行(chmod +x ~/bin/rename-based-on-content-type
)。将要重命名的文件的名称传递给命令行上的脚本。如果您有/path/to/music/directory
要递归遍历的目录树,请将脚本调用为这个 bash 脚本可以解决问题:
该脚本用于
file -i
读取文件的 MIME 类型;我这里没有 FLAC 文件,因此您可能想通过运行file -i a_file.flac
(并可能调整脚本源)来检查 FLAC 的 MIME 类型。-i
如果您想mv
在任何文件重命名之前被要求确认,您可以添加一个选项。在尝试实际重命名之前
mv -v
替换echo mv -v
并进行测试运行可能是一个好主意——这将打印出将由脚本执行的命令。echo mv
mv