폴더 내 모든 .epub 파일을 전자책으로 변환

폴더 내 모든 .epub 파일을 전자책으로 변환

이 코드는 epub 파일을 txt 파일로 변환합니다.

ebook-convert "book.epub" "book.txt"

이것을 사용하여 디렉토리의 모든 .epub 파일을 변환하려면 어떻게 해야 합니까?

저는 우분투를 사용하고 있습니다.

암호

from os import listdir, rename
from os.path import isfile, join
import subprocess


# return name of file to be kept after conversion.
# we are just changing the extension. azw3 here.
def get_final_filename(f):
    f = f.split(".")
    filename = ".".join(f[0:-1])
    processed_file_name = filename+".azw3"
    return processed_file_name


# return file extension. pdf or epub or mobi
def get_file_extension(f):
    return f.split(".")[-1]


# list of extensions that needs to be ignored.
ignored_extensions = ["pdf"]

# here all the downloaded files are kept
mypath = "/home/user/Downloads/ebooks/"

# path where converted files are stored
mypath_converted = "/home/user/Downloads/ebooks/kindle/"

# path where processed files will be moved to, clearing the downloaded folder
mypath_processed = "/home/user/Downloads/ebooks/processed/"

raw_files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
converted_files =  [f for f in listdir(mypath_converted) if isfile(join(mypath_converted, f))]

for f in raw_files:
    final_file_name = get_final_filename(f)
    extension = get_file_extension(f)
    if final_file_name not in converted_files and extension not in ignored_extensions:
        print("Converting : "+f)
        try:
            subprocess.call(["ebook-convert",mypath+f,mypath_converted+final_file_name]) 
            s = rename(mypath+f, mypath_processed+f)
            print(s)
        except Exception as e:
            print(e)
    else:
        print("Already exists : "+final_file_name)

답변1

단일 디렉토리에 있는 파일의 경우(하위 디렉토리로 반복되지 않음) 간단한 쉘 루프 외에는 아무것도 필요하지 않습니다.

for f in ./*.epub; do
  ebook-convert "$f" "${f%.epub}.txt"
done

셸 매개변수 확장은 파일 확장자를 추가할 수 있도록 ${f%.epub}후행을 제거합니다 ..epub.txt

관련 정보