다른 하위 폴더에서 모든 .ape 파일을 .flac로 변환


9

avconv명령 줄에서 일부 .ape 파일을 .flac 파일로 변환하려고했습니다 . 분명히 avconv여기의 요점이 아닙니다. 그것의 문법은 매우 간단하다 avconv -i inputApeFile.ape outputFlacFile.flac.

요점은 파일이 더 많은 하위 폴더에 중첩되어 있다는 것입니다. 즉, Artist 폴더가 있고 다양한 CD 하위 폴더가 있으며 각 하위 폴더마다 다른 .ape 파일이 들어 있습니다. 모든 파일을 변환 한 다음 원본 파일의 동일한 폴더에 .flac 확장자로 저장하려면 어떻게해야합니까?

가능하다면 스크립트를 사용하지 않고 한 줄에 쉘 명령 만 사용하고 싶습니다. 그런 것 같아요

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

하지만 두 번째 부분에 붙어 있습니다 (아마도 sed??!?)

답변:


13

필요한 명령은 다음과 같습니다.

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

그러면 .ape접미사 가있는 각 파일을 찾은 다음 접미사가있는 동일한 파일 이름을 .flac사용하여 원본 파일과 동일한 위치로 변환합니다 .

{}현재 발견 된 파일의 경로입니다. 여기
에서 테스트를 참조 하십시오


1

아래의 (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

답장과 시간 야곱 감사합니다. 그러나 가능하다면 스크립트를 사용하지 않고 한 줄에 쉘 명령 만 사용하고 싶습니다 (죄송합니다. 전에 이것을 지정해야했습니다)
tigerjack89

1
@ tigerjack89 글쎄, 아마 다른 사람이 비슷한 상황에서 그것을 사용할 수 있습니다; 구문 <command> <inputfile> <outputfile>은 매우 일반적입니다.
Jacob Vlijm

0

이제 ffmpeg가 avconv보다 선호되며 저렴한 코어 컴퓨터가 많이 있습니다 (8 코어 XU4의 경우 60 달러).

#!/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 "$@"' _ "{}"

-1

당신이 찾고 있던 한 줄 명령 :
find -type f -name "*.ape" -print0 | xargs -0 avconv -i
find명령은로 끝나는 파일을 제공 할 것입니다 .ape 에 상대 경로를 줄 것이다 명령 은 해당 파일을 변환하고 입력 파일과 같은 폴더에 보관 할 수 있도록 명령 (즉, .ape). 하위 디렉토리에 얼마나 깊이 보관되어 있는지에 관계없이 명령은 해당 디렉토리의 모든 파일을 찾습니다.
findavconv
find


2
이 작동하지 않습니다; avconvSTDIN에서 입력 파일을 가져올 수 없습니다.
evilsoup

1
출력 폴더는 어떻습니까?
tigerjack89

@ evilsoup 나는 대답을 업데이트했으며 xargs는 문제를 해결할 수 있습니다. 이것을 시도하십시오.
Edward Torvalds
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.