ফোল্ডারে প্রতিটি ফাইলের জন্য bash কমান্ড


31

আমার কাছে ফাইলগুলির একটি সেট রয়েছে যার উপরে আমি একই কমান্ডটি প্রয়োগ করতে চাই এবং আউটপুটটিতে প্রক্রিয়াজাত ফাইলের একই নাম থাকা উচিত তবে আলাদা এক্সটেনশন সহ।

বর্তমানে আমি /my/data/Andrew.doc এর নাম /my/data/Andrew.txt- র নামকরণ করছি আমি / আমার / ডেটা / ফোল্ডার থেকে সমস্ত .doc ফাইলের জন্য এটি করতে এবং নামটি সংরক্ষণ করতে চাই।

আমি বেশ কয়েকটি সংস্করণ চেষ্টা করেছি তবে আমার ধারণা লিনাক্সে নতুন হিসাবে আমার সিন্টেক্সে কিছু ভুল আছে।


→ একটু বেশি সম্পূর্ণ & ব্যবহারিক উদাহরণ: stackoverflow.com/a/43474757/444255
ফ্রাঙ্ক Nocke

উত্তর:


76

এটিতে কমপক্ষে এক লক্ষ মিলিয়ন বিভিন্ন উপায় রয়েছে তবে এখানে শীর্ষ প্রতিযোগীরা রয়েছেন:

লুপের জন্য বাশ

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

ব্যবহার find

findকমান্ড একটি সুদৃশ্য সামান্য হয়েছে execযে কমান্ড (কিছু আদেশ সহকারে সঙ্গে) জিনিষ চালানোর জন্য ভালো। বেসিক গ্লোব্বিংয়ের চেয়ে সন্ধানটি ভাল কারণ আপনি যে ফাইলগুলি নির্বাচন করছেন সেগুলিতে আপনি সত্যিই ফিল্টার করতে পারেন। বিজোড় সিনট্যাক্স সম্পর্কে সাবধানতা অবলম্বন করুন।

find . -iname '*.doc' -exec echo "File is {}" \;

নোটটি findপুনরাবৃত্ত হয় যাতে আপনি বর্তমানের কার্যক্ষম ডিরেক্টরিতে -maxdepth 1রাখতে ব্যবহার করতে পারেন find-type fনিয়মিত ফাইলগুলি ফিল্টার করতে ব্যবহার করা যেতে পারে।

আমরা যদি কেবল ডক্সটির নাম পরিবর্তন করে txt করি ...

renameকমান্ড অনুসন্ধানের মধ্যে sed মত হয়। স্পষ্টতই এই ফর্ম্যাটটি রূপান্তর করতে কিছুই করবে না।

rename 's/doc$/txt/' *.doc

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