সমস্ত .ape ফাইলগুলি বিভিন্ন সাবফোল্ডারে .flac এ রূপান্তর করুন


9

আমি avconvকমান্ড লাইনে কিছু .ape ফাইলগুলি .flac ফাইলগুলিতে রূপান্তর করার চেষ্টা করছিলাম ; স্পষ্টতই, avconvএখানে প্রধান পয়েন্ট নয়; এর বাক্য গঠনটি বেশ সোজা avconv -i inputApeFile.ape outputFlacFile.flac,।

মুল বক্তব্যটি হ'ল ফাইলগুলি আরও সাবফোল্ডারে বাসা বাঁধে; অর্থ্যাৎ আমার কাছে আর্টিস্ট ফোল্ডার রয়েছে, তারপরে বিভিন্ন সিডি সাবফোল্ডার রয়েছে যার প্রত্যেকটিতে আলাদা আলাদা .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

নীচে (অজগর) স্ক্রিপ্টটি কাজ করা উচিত। এটিকে একটি ফাঁকা ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন, 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 ওয়েল, সম্ভবত কেউ এলস এটি একই পরিস্থিতিতে ব্যবহার করতে পারে; সিনট্যাক্স <কম্যান্ড> <ইনপুট ফাইল> <আউটপুট ফাইল> বেশ সাধারণ।
জ্যাকব 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 সমাপ্ত ফাইল সরবরাহ করবে
, findকমান্ডটি কমান্ডের সাথে সম্পর্কিত পাথটি দেবে avconvযাতে এটি সেই ফাইলগুলিকে রূপান্তর করতে এবং ইনপুট ফাইলের (যেমন .ape) হিসাবে একই ফোল্ডারে রাখতে পারে।
findকমান্ড সেই ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করবে যেগুলিকে সাব-ডিরেক্টরিতে কত গভীর রাখা হয়


2
এটি কাজ করবে না; avconvSTDIN এর মতো ইনপুট ফাইলগুলি নিতে পারে না।
অশুভ

1
আউটপুট ফোল্ডার সম্পর্কে কি?
tigerjack89

@ ইভিলসপ আমি উত্তরটি আপডেট করেছি, জার্গস বিষয়টি সমাধান করতে পারে। এই চেষ্টা করুন।
এডওয়ার্ড টরভাল্ডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.