Преобразуйте все .ape файлы в .flac в различных подпапках

Я пытался преобразовать некоторые .ape файлы в .flac использование файлов avconv на командной строке; очевидно, avconv не основной момент здесь; его синтаксис довольно прост, avconv -i inputApeFile.ape outputFlacFile.flac.

Дело в том, что файлы вкладываются в большем количестве подпапок; т.е. у меня есть папка Artist, затем различные подпапки CD, каждый из, каждого содержит различные .ape файлы. Как я могу преобразовать все файлы и затем сохранить их в той же папке исходного файла, но с .flac расширением?

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

avconv -i 'ls -R | grep ape' '???'

но я застреваю со второй частью (возможно, использование sed??!?)

9
задан 9 November 2014 в 19:54

4 ответа

Команда, в которой Вы нуждаетесь:

find /path/to/MainDir/ -type f -name "*.ape"  -execdir sh -c ' avconv -i "$1" "${1%.ape}.flac" ' _ {} \;

Это найдет каждый файл, который имеет .ape суффикс, и затем преобразуйте его с тем же именем файла с .flac суффикс к тому же местоположению, как исходный файл расположен.

{} путь текущего найденного файла.
Посмотрите тест от здесь

13
ответ дан 16 November 2019 в 16:14

(Python) сценарий ниже должен сделать задание. Скопируйте его в пустой файл, сохраните его как convert.py, установите каталог на файлы в главном разделе сценария (convert_dir =) и выполните его командой:

python3 /path/to/convert.py

сценарий

#!/usr/bin/env python3

convert_dir = "/path/to/folder/tobeconverted"

import os
import subprocess

for root, dirs, files in os.walk(convert_dir):
    for name in files:
        if name.endswith(".ape"):
            # filepath+name
            file = root+"/"+name
            # to use in other (convert) commands: replace the "avconv -i" by your command, and;
            # replace (".ape", ".flac") by the input / output extensions of your conversion
            command = "avconv -i"+" "+file+" "+file.replace(".ape", ".flac")
            subprocess.Popen(["/bin/bash", "-c", command])
        else:
            pass
1
ответ дан 16 November 2019 в 16:14

Теперь, когда ffmpeg предпочтен по avconv снова, и там являются дешевыми много базовых компьютеров (60$ для 8 базовых XU4) я шрифт следующее, чтобы быть самым эффективным;

#!/bin/bash

#
# ape2flac.sh
#

function f2m(){
        FILE=$(echo "$1" | perl -p -e 's/.ape$//g');
        if [ ! -f "$FILE".flac ] ; then
                ffmpeg -v quiet -i "$FILE.ape" "$FILE.flac"
        fi
}
export -f f2m
find "$FOLDER" -name '*.ape' | xargs -I {} -P $(nproc) bash -c 'f2m "$@"' _ "{}"
0
ответ дан 16 November 2019 в 16:14

одна команда строки Вы искали:
find -type f -name "*.ape" -print0 | xargs -0 avconv -i
find команда обеспечит только файлы, заканчивающиеся .ape
find команда даст относительный путь avconv управляйте так, чтобы это могло преобразовать те файлы и сохранить их в той же папке как входной файл (т.е. .ape).
find команда найдет все файлы в том каталоге независимо от того, как глубоко они сохранены в подкаталоге

-1
ответ дан 16 November 2019 в 16:14

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

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