3

Я использую Timidity, чтобы конвертировать много MIDI-файлов в mp3. Мне было интересно, существует ли стандартный способ задания шаблона вывода, чтобы он преобразовывал все файлы *.mid в /path/*.wav

Я спрашиваю об этом в целом, потому что это также относится к команде mv . Или это связано с конкретной реализацией в приложении?

Итак, как переместить файлы * .mid в * .wav?

2 ответа2

1

Я сделал скрипт Python, который перемещает * .mid в * .wav.

#!/usr/bin/python2.7

import sys
import glob
import shutil
import os

try:
    dir = sys.argv[1]
except IndexError:
    print "Usage: "+sys.argv[0]+" dir"
    print "Example: "+sys.argv[0]+" /home/user/dir"
    sys.exit(1)

for file in glob.glob(os.path.join(dir, '*.mid')):
    newfile = file.partition(".mid")
    newfile = newfile[0]
    newfile = newfile+".wav"
    shutil.move(file, newfile)
1

Предположим, вы просто хотите переименовать файлы. Затем, если вы используете оболочку Bourne (например, sh , bash), вы можете запустить команду для файлов, соответствующих шаблону, используя цикл for . Вот эквивалентные многострочные и однострочные версии:

for f in *.mid
do
    mv "$f" "${f%.mid}.wav"
done
for f in *.mid; do mv "$f" "${f%.mid}.wav"; done

Цикл for запускает команды, где $f является каждым словом в расширении *.mid , а ${f%.mid} удаляет суффикс .mid чтобы мы могли заменить его на .wav . Кавычки делают эту программу корректной для имен файлов, содержащих пробелы (но не для имен файлов, начинающихся с «-», поскольку это зависит от команды). Если вы хотите сопоставить несколько групп файлов, а не все, вы можете использовать несколько шаблонов, например for f in alpha-*.mid beta-*.mid; do ...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .