使用缺少的文件扩展名重命名音乐文件

我最近一直在试验几个不同的音乐游戏玩家,并且还看到我的音乐中的一些(很多)肯定会错过这个系列。 结果是,在某个时候,无数的音乐文件都会脱掉他们的.mp3 /。 OGG /。 flac文件扩展。 我真的不确定这是怎么发生的,但我确定这是我做错了(或者我认为无论如何文件扩展主要是美学无关紧要)。

所以我要求将这些文件扩展回来。 我已经检查了pyrenamer,但是我无法确定如何在没有扩展的情况下将其与文档进行匹配,然后通知它添加 正确 文件扩展依赖于真实的文件类型。

我还考虑过EasyTag。 尽管如此,它还完全基于文档扩展来识别音乐文档。 所以我打算处理的音乐也不会出现。 大。

关于如何做到这一点的任何想法? 我绝对不介意一些命令行,我只是不确定哪些设备肯定是最好的,而且我还在正则表达式中绘制。

0
2019-05-18 20:50:14
资源 分享
答案: 2

这个庆祝手稿就足够了:

#! /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的MIME类型。

如果您打算在重新标记任何类型的文档之前要求验证,则可以向mv添加备用-i

这可能是一个很好的建议,可以通过echo mv -v更改mv -v并执行操作。 试运行 之前 尝试真正的重新标记 - - echo mv会。 打印出mv规则,这肯定会由手稿实现。

0
2019-05-21 03:48:12
资源

这是一份庆祝手稿,根据其假定的布局重新标记传递给它的文件。 它通过考虑前几个字节中的特定模式来调用file来识别布局。 file -i打印像/path/to/file: type/subtype这样的行,其中type/subtypeMIME类型。 之后的手稿将扩展链接到众所周知的种类,并且还重新标记文件以进行扩展。 目前有扩张的文件被解雇。 放下具有未知类型的文档。 在覆盖目标文件之前,手稿肯定会激励。

#!/bin/bash
# usage:
# fixmime ./{**/,}*
file --mime-type "[email protected]" |
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/{**/,}*
0
2019-05-21 02:18:27
资源