পাইপ জুড়ে কি জার্গস ব্যবহার করার কোনও উপায় আছে?


15

আমি অন্য ফোল্ডারে একটি ফোল্ডারে স্থানান্তরিত ফ্ল্যাক ফাইলগুলি স্বয়ংক্রিয়ভাবে এমপি 3 এ রূপান্তর করার চেষ্টা করছি।

আমার বর্তমান কোডের লাইনটি হ'ল:

inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test |  xargs -I x flac -cd x - | lame -b 320 - /media/1tb/x.mp3

এটি এখন পর্যন্ত কীভাবে কাজ করে তা ব্যাখ্যা করতে, ইনোটিফাইয়েট মনিটরিজ করে there / পরীক্ষাটি পুনরুদ্ধার করে সেখানে সরানো ফাইলগুলির জন্য, একটি পাইপ থেকে পথ এবং ফাইলের নাম আউটপুট করে। xargs এই নামটি গ্রহণ করে এবং যথাযথ ফ্ল্যাক কমান্ড তৈরি করে, এক্সকে প্রতিস্থাপন করে ফাইলের নাম দিয়ে এবং ফাইলটি অন্য পাইপে ডিকোড করে। নতুন পাইপে খোঁড়া প্রক্রিয়াটি মিডিয়ার আওতায় এমপি 3 এ ফ্ল্যাকের আউটপুট প্রসেস করে। আমি চাই যে xargs হয় কোনওভাবে পাইপ জুড়ে পৌঁছায়, x কে ল্যাম্প কমান্ডে প্রতিস্থাপন করে বা কোনও উপায়ে এটি একটি চলকটিতে প্রেরণ করুন উভয় কমান্ড অ্যাক্সেস করতে পারে বা কিছু। আমি নামী পাইপ এবং সেই জাজটি নিয়ে ঘোরাঘুরি করার চেষ্টা করেছি তবে দুটি কমান্ডের মধ্যে পাইপ করা হচ্ছে এমন প্রকৃত তথ্য আমার মাথার উপর দিয়ে গেছে।

উত্তর:


16

যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি flac … | lame …প্রতিটি ইনপুট লাইনের জন্য একটি উদাহরণ সরিয়ে রাখতে চান এবং উভয় কমান্ডের আর্গুমেন্টে ইনপুটটি ফাঁক করে দিতে চান।

যেহেতু আপনাকে xargsপাইপলাইন শুরু করতে হবে, আপনাকে এটি এমন একটি প্রোগ্রাম শুরু করতে হবে যা পাইপলাইন তৈরি করতে সক্ষম, অর্থাত একটি শেল।

inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
xargs -l sh -c 'flac -cd "$0" - | lame -b 320 - "/media/1tb/$0.mp3"'

বিকল্পভাবে, কলিং শেলটি একে একে রিড লাইন পড়ুন এবং পাইপলাইনটি চালান।

inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
while IFS= read -r file; do
  flac -cd "$file" - | lame -b 320 - "/media/1tb/$file.mp3"
done

নোট করুন যে ফর্ম্যাটটি %w%fএকটি পরম পথ তৈরি করে, যার প্রতি আপনি প্রিপেন্ডিং /media/1tbএবং সংযোজন করছেন .mp3। আপনি যদি lameকমান্ডের ফাইলের ডিরেক্টরি অংশটি সরিয়ে দিতে চান তবে এতে পরিবর্তন $fileকরুন ${file##*/}। আপনি যদি এক্সটেনশনটি সরিয়ে দিতে চান তবে এতে পরিবর্তন $fileকরুন ${file%.*}। যদি আপনি উভয়ই করতে চান তবে আপনাকে এটি দুটি ধাপে করতে হবে। যদি আপনি অধীনে ডিরেক্টরি শ্রেণিবিন্যাস পুনরুত্পাদন করতে চান /media/1tb, আপনি ব্যবহার করতে পারেন mkdir -p

cd ~/test
inotifywait -m -r -q -e moved_to --format "%w%f" . |
while IFS= read -r file; do
  [ -f "$file" ] || continue; # skip directories and other special files
  dir=${file%/*}; file=${file##*/}
  mkdir -p "/media/1tb/$dir"
  flac -cd "$dir/$file" - | lame -b 320 - "/media/1tb/$dir/${file#.*}.mp3"
done

3

আপনি এরকম কিছু চেষ্টা করতে পারেন:

inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test \
    | while read x; do \
        flac -cd "$x" - | lame -b 320 - "/media/1tb/$x.mp3"
    done;

1
while read …একটি সমাধান, কিন্তু তারপর, ড্রপ xargs। আপনি যা লিখেছেন তা বোধগম্য নয়: আপনি কী ভাবেন xargsযে এর ইনপুটটি পাচ্ছে? এবং আপনার জিনিসগুলি যথাযথভাবে উদ্ধৃত করা উচিত, সঙ্গীত ফাইলের নামগুলিতে স্পেস থাকতে পারে এটি সাধারণ।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

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