Переименование музыкальных файлов с отсутствующими расширениями файлов

Недавно я тестировал несколько разных музыкальных плееров и заметил, что в библиотеке будет отсутствовать (много) моей музыки. Оказывается, в какой-то момент множество моих музыкальных файлов потеряло свои расширения .mp3 / .ogg / .flac. Я честно не знаю, как это произошло, но я уверен, что это было что-то, что я сделал ошибочно (или, может быть, я думал, что это не имеет значения, поскольку расширения файлов в основном косметические).

чтобы вернуть эти расширения файлов. Я посмотрел на pyrenamer, но я не могу понять, как сопоставить его с файлами без расширения, а затем сказать ему, чтобы добавить правильное расширение файла в зависимости от фактического типа файла.

I Мы также посмотрели EasyTag. Тем не менее, он также распознает музыкальные файлы, основанные исключительно на их расширениях файлов. Поэтому музыка, которую я хочу исправить, даже не появляется. Блестящий.

Любые мысли о том, как это сделать? Я, конечно, не против какой-то командной строки, я просто не уверен, какие инструменты были бы лучшими, и я тоже сосать в регулярном выражении.

3
задан 15 October 2010 в 03:57

20 ответов

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает file, чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -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/{**/,}*
7
ответ дан 26 May 2018 в 01:01
  • 1
    Это работало блестяще. Насколько я могу судить. Я также узнал немного больше о bash scripting :) Спасибо! – gregghz 15 October 2010 в 04:54
  • 2
    по какой-то причине это не работало над всей песней, но я смог быстро подобрать (очень) несколько, которые он не поймал, используя lltag – gregghz 15 October 2010 в 05:21

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает file, чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -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/{**/,}*
7
ответ дан 25 July 2018 в 23:04

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает file, чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -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/{**/,}*
7
ответ дан 27 July 2018 в 02:35

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает file, чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -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/{**/,}*
7
ответ дан 31 July 2018 в 13:14

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 2 August 2018 в 04:25

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 4 August 2018 в 20:57

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 6 August 2018 в 04:30

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 7 August 2018 в 22:39

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 10 August 2018 в 10:45

Вот сценарий bash, который переименовывает файлы, переданные ему, на основе их угаданного формата. Он вызывает файл , чтобы определить формат, просмотрев характерные шаблоны в первых байтах. file -i печатает строки типа / path / to / file: type / subtype , где тип / подтип - это тип MIME . Затем скрипт связывает расширения с известными типами и переименовывает файл для расширения. Файлы, которые уже имеют расширение, остаются в силе. Файлы, имеющие непризнанный тип, остаются в силе. Сценарий будет запрашивать перед перезаписью целевого файла.

  #! / Bin / bash # use: # fixmime ./{**/,}* file --mime-type "$ @"  |  при чтении строки -r;  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 ваши заметки, даже если они являются обычным текстом / html) ext = html ;;  text / x-pascal) ext = py ;;  text / x-c ++) ext = js ;;  #conflicts .cpp, поэтому используйте предпочтительный текст / x-c) ext = scss ;;  #usualy это .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 ;;  *) Продолжать;;  esac [[$ file = *. $ ext]] ||  mv -i - "$ file" "$ file. $ ext" done  

Сохранить сценарий как ~ / bin / rename-on-content-type (или как вам нравится) и сделать его исполняемым ( chmod + x ~ / bin / rename-on-content-type ). Передайте имена файлов, которые вы хотите переименовать в сценарий в командной строке. Если у вас есть дерево каталогов / path / to / music / directory , которое вы хотите пройти рекурсивно, вызовите скрипт как

  ~ / bin / rename-based-  on-content-type / path / to / music / directory / {** /,} *  
7
ответ дан 13 August 2018 в 17:19
  • 1
    Это работало блестяще. Насколько я могу судить. Я также узнал немного больше о bash scripting :) Спасибо! – gregghz 15 October 2010 в 04:54
  • 2
    по какой-то причине это не работало над всей песней, но я смог быстро подобрать (очень) несколько, которые он не поймал, используя lltag – gregghz 15 October 2010 в 05:21

Этот скрипт 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 здесь, поэтому вы можете проверить, какой тип MIME для FLAC работает, запустив file -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv, если вы хотите, чтобы вас попросили подтвердить до того, как любой файл переименуется.

Возможно, было бы неплохо заменить mv -v на echo mv -v и выполнить тестовый прогон перед попыткой фактических переименований - echo mv распечатает команды mv, которые будут выполняться скриптом.

2
ответ дан 26 May 2018 в 01:01
  • 1
    Множество моих mp3-файлов я побежал file -i на return audio/mpeg вместо audio/mp3, может быть, вы могли бы добавить это в свой скрипт? – Isaiah 15 October 2010 в 04:37
  • 2
    @DoR, просто добавьте audio / mpeg ) ext = '. Mp3' ;; в первом случае раздел – gregghz 15 October 2010 в 04:46

Этот скрипт 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 здесь, поэтому вы можете проверить, какой тип MIME для FLAC работает, запустив file -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv, если вы хотите, чтобы вас попросили подтвердить до того, как любой файл переименуется.

Возможно, было бы неплохо заменить mv -v на echo mv -v и выполнить тестовый прогон перед попыткой фактических переименований - echo mv распечатает команды mv, которые будут выполняться скриптом.

2
ответ дан 25 July 2018 в 23:04
  • 1
    Множество моих mp3-файлов я побежал file -i на return audio/mpeg вместо audio/mp3, может быть, вы могли бы добавить это в свой скрипт? – Isaiah 15 October 2010 в 04:37
  • 2
    @DoR, просто добавьте audio / mpeg ) ext = '. Mp3' ;; в первом случае раздел – gregghz 15 October 2010 в 04:46

Этот скрипт 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 здесь, поэтому вы можете проверить, какой тип MIME для FLAC работает, запустив file -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv, если вы хотите, чтобы вас попросили подтвердить до того, как любой файл переименуется.

Возможно, было бы неплохо заменить mv -v на echo mv -v и выполнить тестовый прогон перед попыткой фактических переименований - echo mv распечатает команды mv, которые будут выполняться скриптом.

2
ответ дан 27 July 2018 в 02:35
  • 1
    Множество моих mp3-файлов я побежал file -i на return audio/mpeg вместо audio/mp3, может быть, вы могли бы добавить это в свой скрипт? – Isaiah 15 October 2010 в 04:37
  • 2
    @DoR, просто добавьте audio / mpeg ) ext = '. Mp3' ;; в первом случае раздел – gregghz 15 October 2010 в 04:46

Этот скрипт 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 здесь, поэтому вы можете проверить, какой тип MIME для FLAC работает, запустив file -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv, если вы хотите, чтобы вас попросили подтвердить до того, как любой файл переименуется.

Возможно, было бы неплохо заменить mv -v на echo mv -v и выполнить тестовый прогон перед попыткой фактических переименований - echo mv распечатает команды mv, которые будут выполняться скриптом.

2
ответ дан 31 July 2018 в 13:14
  • 1
    Множество моих mp3-файлов я побежал file -i на return audio/mpeg вместо audio/mp3, может быть, вы могли бы добавить это в свой скрипт? – Isaiah 15 October 2010 в 04:37
  • 2
    @DoR, просто добавьте audio / mpeg ) ext = '. Mp3' ;; в первом случае раздел – gregghz 15 October 2010 в 04:46

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 2 August 2018 в 04:25

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 4 August 2018 в 20:57

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 6 August 2018 в 04:30

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 7 August 2018 в 22:39

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 10 August 2018 в 10:45

Этот скрипт bash может сделать трюк:

  #!  / bin / bash find ~ / Music-type f |  (в то время как путь чтения, в случае `file -i" $ path "` in * audio / mp3 * | * audio / mpeg *) ext = '. mp3' ;;  * application / ogg *) ext = '. ogg' ;;  * flac *) ext = '. flac' ;;  *) Продолжать;;  # игнорировать неизвестные файлы esac newname = "$ (dirname" $ ​​path ") / $ (basename" $ ​​path "" $ ext "). $ ext" if ["$ path"! = "$ newname"];  то mv -v "$ path" "$ newname" fi done)  

Скрипт использует файл -i для чтения MIME-типа файла; У меня нет файлов FLAC здесь, поэтому вы можете проверить, какой тип MIME для FLAC, запустив файл -i a_file.flac (и, возможно, отредактировав источник сценария).

Вы можете добавить опцию -i в mv , если вы хотите, чтобы вас попросили подтвердить, прежде чем переименовать файл.

может быть хорошей идеей заменить mv -v на echo mv -v и выполнить тестовый прогон перед , пытаясь переименовать фактические значения - [ echo mv выведет команды mv , которые будут выполняться скриптом.

2
ответ дан 13 August 2018 в 17:19
  • 1
    Многие мои mp3-файлы я запустил файл -i в ответ на audio / mpeg вместо audio / mp3 , возможно, вы могли бы добавить это к своему скрипт? – Isaiah 15 October 2010 в 04:37
  • 2
    @DoR, просто добавьте audio / mpeg ) ext = '. Mp3' ;; в первом случае раздел – gregghz 15 October 2010 в 04:46

Другие вопросы по тегам:

Похожие вопросы: