帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:重命名  文件扩展名  extensions  文件  ext  音乐  files  

问题:

我最近尝试了几个不同的音乐播放器,注意到我的音乐中有些音乐会在图书馆里消失。 结果是,在某些时候,我的音乐文件丢失了他们的. mp3/.ogg/.flac 文件扩展名。 我真的不知道这是怎么发生的,但我相信这是我错误的( 或者也许我认为这无关紧要,因为文件扩展名基本上是化妆品)。

所以我需要把这些文件的扩展名。 查看了 pyrenamer,但是不知道如何使用扩展名将它发送给文件,然后根据文件的实际类型,告诉它添加正确的文件扩展名。

我还查看了 EasyTag。 但是,它也完全基于文件扩展名识别音乐文件。 所以我想修复的音乐甚至都没有显示出来。 精彩。

关于如何做这件事的? 我当然不介意一些 命令行,我只是不确定哪些工具会最好,我也会吸引 正规表达式。


回答 1:

下面是一个bash脚本,它根据被猜测的格式重命名传递给它的文件。 它通过查看前几个字节中的特征模式来调用 filefile -i 打印行,如 /path/to/file: type/subtype,其中 type/subtype 是一个 MIME类型。 然后脚本将扩展关联到已知类型并重命名文件以获得扩展。 已经有扩展名的文件将被保留。 具有无法识别类型的文件将单独保留。 在覆盖目标文件之前,脚本将提示。


#!/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



将脚本保存为 ~/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/{**/,}*




回答 2:

这里bash脚本可以执行以下操作:


#!/bin/bash



find ~/Music -type f | (while read path; do


 case `file -i"$path"` in


 *audio/mp3*|*audio/mpeg*) ext='.mp3' ;;


 *application/ogg*) ext='.ogg' ;;


 *flac*) ext='.flac' ;;


 *) continue;; # ignore unknown files


 esac



 newname="$(dirname"$path")/$(basename"$path""$ext").$ext"


 if ["$path"!="$newname" ]; then


 mv -v"$path""$newname"


 fi


done)



脚本使用 file -i 读取文件的MIME类型;这里没有FLAC文件,因此你可能想检查运行 file -i a_file.flac ( 并且可能调整脚本源)的FLAC类型。

如果希望在文件重命名时被询问,可以将选项 -i 添加到 mv 中。

replace替换 mv -v 并执行测试测试运行可能是一个好主意尝试实际重命名--将输出脚本将要执行的mv 命令。




文章标签:文件  ext  files  音乐  extensions  重命名  文件扩展名  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语