我最近一直在尝试一些不同的音乐播放器,并注意到我的一些(很多)音乐会从库中丢失。事实证明,在某些时候,我的大量音乐文件丢失了它们的 .mp3/.ogg/.flac 文件扩展名。老实说,我不确定这是怎么发生的,但我相信这是我做错的事情(或者我认为这无关紧要,因为无论如何文件扩展名大多是装饰性的)。
所以我需要取回这些文件扩展名。我已经研究过pyrenamer,但我无法弄清楚如何将它与没有扩展名的文件匹配,然后告诉它根据文件的实际类型添加正确的文件扩展名。
我也看过EasyTag。但是,它也可以完全根据文件扩展名识别音乐文件。所以我想修复的音乐甚至没有出现。杰出的。
关于如何做到这一点的任何想法?我当然不介意一些命令行,我只是不确定哪种工具是最好的,而且我也很擅长正则表达式。
这是一个 bash 脚本,它根据猜测的格式重命名传递给它的文件。它要求file通过查看前几个字节中的特征模式来确定格式。file -i打印诸如/path/to/file: type/subtypewhere type/subtypeis a MIME type 之类的行。然后脚本将扩展名与已知类型相关联,并将文件重命名为具有扩展名。已经具有扩展名的文件被保留。具有无法识别类型的文件被保留。脚本将在覆盖目标文件之前提示。
#!/bin/bash
# usage:
# fixmime ./{**/,}*
file --mime-type "$@" |
while read -r line; do
file=${line%:*}
type=${line##* }
case $type in
#Audio
audio/x-flac) ext=flac;;
audio/mpeg) ext=mp3;;
application/ogg) ext=ogg;;
#Video
video/mp4) ext=mp4;;
video/x-flv) ext=flv;;
application/octet-stream) ext=webm;;
application/x-shockwave-flash) ext=swf;;
#Images
image/png) ext=png;;
image/jpeg) ext=jpg;;
image/gif) ext=gif;;
image/x-ico) ext=ico;;
#Text
text/plain) ext=md;; #markup your notes, even when they are plain
text/html) ext=html;;
text/x-pascal) ext=py;;
text/x-c++) ext=js;; #conflicts with .cpp, so use prefered
text/x-c) ext=scss;; #usualy it is .c
text/x-shellscript) ext=sh;;
application/pdf) ext=pdf;;
#Fonts
application/x-font-ttf) ext=ttf;;
application/vnd.ms-opentype) ext=otf;;
#Archive
application/x-gzip) ext=tar.gz;;
application/x-bzip2) ext=tar.bz;;
*) continue;;
esac
[[ $file = *.$ext ]] || mv -i -- "$file" "$file.$ext"
done
Run Code Online (Sandbox Code Playgroud)
将脚本另存为~/bin/rename-based-on-content-type(或任何您喜欢的)并使其可执行 ( chmod +x ~/bin/rename-based-on-content-type)。在命令行上将要重命名的文件的名称传递给脚本。如果您有/path/to/music/directory要递归遍历的目录树,请按以下方式调用脚本
~/bin/rename-based-on-content-type /path/to/music/directory/{**/,}*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |