Недавно я тестировал несколько разных музыкальных плееров и заметил, что в библиотеке будет отсутствовать (много) моей музыки. Оказывается, в какой-то момент множество моих музыкальных файлов потеряло свои расширения .mp3 / .ogg / .flac. Я честно не знаю, как это произошло, но я уверен, что это было что-то, что я сделал ошибочно (или, может быть, я думал, что это не имеет значения, поскольку расширения файлов в основном косметические).
чтобы вернуть эти расширения файлов. Я посмотрел на pyrenamer, но я не могу понять, как сопоставить его с файлами без расширения, а затем сказать ему, чтобы добавить правильное расширение файла в зависимости от фактического типа файла.
I Мы также посмотрели EasyTag. Тем не менее, он также распознает музыкальные файлы, основанные исключительно на их расширениях файлов. Поэтому музыка, которую я хочу исправить, даже не появляется. Блестящий.
Любые мысли о том, как это сделать? Я, конечно, не против какой-то командной строки, я просто не уверен, какие инструменты были бы лучшими, и я тоже сосать в регулярном выражении.
Вот сценарий 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/{**/,}*
Вот сценарий 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/{**/,}*
Вот сценарий 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/{**/,}*
Вот сценарий 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/{**/,}*
Вот сценарий 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 / {** /,} *
Вот сценарий 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 / {** /,} *
Вот сценарий 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 / {** /,} *
Вот сценарий 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 / {** /,} *
Вот сценарий 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 / {** /,} *
Вот сценарий 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 / {** /,} *
Этот скрипт 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, которые будут выполняться скриптом.
Этот скрипт 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, которые будут выполняться скриптом.
Этот скрипт 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, которые будут выполняться скриптом.
Этот скрипт 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, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
Этот скрипт 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
, которые будут выполняться скриптом.
-i
в ответ на audio / mpeg
вместо audio / mp3
, возможно, вы могли бы добавить это к своему скрипт?
– Isaiah
15 October 2010 в 04:37