CSV ফাইলের উপর ভিত্তি করে কীভাবে ব্যাচের পুনর্নামকরণ ফাইল (চিত্রগুলি) করবেন to


11

আমার যা আছে এবং অর্জন করতে চাই:

  1. একটি ফোল্ডারে হাজার হাজার চিত্র রয়েছে।

  2. আমার কাছে নিম্নলিখিত কলামগুলির সাথে একটি সিএসভি ফাইল রয়েছে:

    উত্তর: আসল নাম বি: নামকরণ করা নাম

    একটি সাধারণ সারি এর মতো দেখাচ্ছে:

    "original-1.jpg","renamed-1.jpg"  
    "original-2.jpg","renamed-2.jpg"

    আমি উদ্ধৃতিগুলি মুছে ফেলতে পারি, এটি কোনও সমস্যা নয়।

  3. এখন আমি একটি অ্যাপ্লিকেশন ব্যবহার করতে চাই বা একটি স্ক্রিপ্ট চালাতে চাই যা কলাম এ এর ​​সমস্ত চিত্র সন্ধান করবে এবং কলাম বি তে তাদের নাম পরিবর্তন করবে (উদাঃ আসল-১.jpg -> নামকরণ -১.জেপিজি)।

আশেপাশে কিছু উত্তর রয়েছে, যেমন:

http://ubuntuforums.org/showthread.php?t=1069652

http://systembash.com/content/one-line-batch-rename-files-using-csv-input-file-and-awk/

তবে কিছু স্ক্রিপ্টিং এর সাথে জড়িত রয়েছে এবং আমি নিশ্চিত নই যে এই সমস্ত স্ক্রিপ্টগুলি কেবলমাত্র সেই ফোল্ডারেই প্রভাবিত করে যেখানে আপনি স্ক্রিপ্টটি সঞ্চয় করেন অথবা তারা কিছু শর্ত পূরণ করে ডিস্কের সমস্ত ফাইলের নাম পরিবর্তন করতে পারে। অবশ্যই, পরেরটি এড়ানো দরকার।

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

তুমাকে অগ্রিম ধন্যবাদ.

উত্তর:


13

এটি আপনার পক্ষে কাজ করা উচিত:

sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done 

ব্যাখ্যা:

  • sed 's/"//g' files.csv : উদ্ধৃতিগুলি সরান
  • IFS=, : ইনপুটটি বিভক্ত করুন ,
  • while read orig new; do ... done: এটি প্রতিটি ইনপুট লাইনটি পড়বে, এটির $IFS(এখানে একটি কমা) এর মান অনুসারে বিভক্ত হবে এবং 1 ম ক্ষেত্রটি $origএবং অন্যান্য হিসাবে সংরক্ষণ করবে $new
  • mv "$orig" "$new" : এটি অনুরোধ করা ফাইলগুলির নাম পরিবর্তন করবে।

যদি আপনার ফাইলটিতে কেবল ফাইলের নাম (যেমন orig.jpg) এবং কোনও পাথ (না /home/take2/orig.jpgবা অনুরূপ) থাকে তবে উপরের কমান্ডটি কেবলমাত্র আপনার বর্তমান ডিরেক্টরিতে থাকা ফাইলগুলিকে প্রভাবিত করবে। সুতরাং, আপনাকে cdলক্ষ্য ডিরেক্টরিতে একটি টার্মিনাল খুলতে হবে এবং এটি সেখানে চালাতে হবে।

প্রথম পরীক্ষা:

এটি পরীক্ষা করতে, আপনি প্রথমে কমান্ডগুলি প্রিন্ট করে একটি শুকনো রান করতে পারেন যা বাস্তবে কার্যকর না করে চালানো হবে:

sed 's/"//g' files.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done 

দুর্দান্ত, এটি আরও ভালভাবে ব্যাখ্যা করা হয়েছে। :) এটি চালানোর আগে কেবল পরীক্ষা করার জন্য - আমাকে টার্গেট ডিরেক্টরিতে সিডি করতে হবে এবং এই লাইনটি চালাতে হবে বা সেই লাইনটি উদাহরণস্বরূপ সংরক্ষণ করতে হবে এবং তারপরে টার্মিনাল থেকে "উদাহরণ.sh" চালাতে হবে?
15

@ টেক 2 আপনি সরাসরি লাইনটি চালাতে পারবেন। আমি আসলে আপনার ফাইলগুলি পরিবর্তন না করে কী চলবে তা দেখার একটি উপায় দিয়ে উত্তরটি আপডেট করেছিলাম, আমি আপনাকে প্রথমে এটি করার পরামর্শ দিই।
টেরডন

আশ্চর্য, এটি কাজ করে! আরও একটি বিষয় - কলামগুলির লেবেলগুলি কী (কী এই মুহুর্তে তারা "উত্স" এবং "নতুন") এটি কী যত্ন করে বা এটি কলামের নামগুলি কলামের নাম দিয়ে নাম দেয়?
15

@ কি 2 লেবেল? না, এটি কেবল প্রথম কমা দ্বারা পৃথক করা ক্ষেত্র নেয় এবং এটির দ্বিতীয় নামকরণ করে। মনে রাখবেন যে এখানে যদি দুটিরও বেশি ক্ষেত্র থাকে, তবে এটির নামটি বাকী লাইনে রাখবে। যতক্ষণ না আপনার ইনপুট ফাইলটি পোস্ট করেছে এটি প্রত্যাশার মতো কাজ করবে।
টারডন

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