আমার ড্রপবক্স ফোল্ডারে ফোল্ডার, সাবফোল্ডার এবং ফাইলগুলি থেকে সমস্ত অবৈধ অক্ষর প্রতিস্থাপন করুন


0

আমাদের অফিসটি আমাদের ডিজাইন প্রকল্পগুলি সংগঠিত করতে ম্যাক্সে ড্রপবক্স ব্যবহার করে। বেশ কয়েক বছর ধরে, এই ফাইল এবং ফোল্ডারগুলির অনেকগুলি উইন্ডোজ ওএসে অবৈধ যে অক্ষরগুলি দিয়ে সংরক্ষণ করা হয়েছিল। আমাদের অফিসে কিছু উইন্ডোজ ওএস কম্পিউটার যুক্ত করতে হবে। এই ফাইলগুলির কোনওটিই সঠিকভাবে সিঙ্ক না হওয়ায় এটি একটি সমস্যা তৈরি করেছে।

আমি ওএসএক্স স্ক্রিপ্টগুলি চালনা সম্পর্কে খুব কম জানি, তবে এই গাইডটি এসে পৌঁছেছে যা আমার যা প্রয়োজন তা প্রায় ঘটায়, কেবলমাত্র আমার সমস্ত সাব-ফোল্ডার এবং ফাইলগুলি জুড়ে কাজ করা দরকার except ব্যক্তি একটি প্রোগ্রামে মোড়ানো একটি স্বয়ংক্রিয় স্ক্রিপ্ট তৈরি করেছে created

প্রদত্ত ফোল্ডারে সমস্ত ফাইলের নাম থেকে সমস্ত অবৈধ অক্ষর সরান

এর মতো স্ক্রিপ্টের পক্ষে কি সমস্ত সাবফোল্ডার এবং ফাইলগুলিও অন্তর্ভুক্ত করা সম্ভব? এই স্ক্রিপ্টটি সমস্ত স্পেস এবং বিশেষ অক্ষরগুলি সরিয়ে দেয়, তবে যদি কোনও সম্ভাবনা থাকে তবে তাদের আন্ডারস্কোর দিয়ে প্রতিস্থাপন করা আরও ভাল।

ধন্যবাদ

উত্তর:


0
  • সহজ উপায় পেতে slhck এর স্ক্রিপ্ট সাবফোল্ডার এবং ফাইল অনুসন্ধান করতে যাও recursively, আপনি ব্যাশ ব্যবহার করছেন, যোগ হয় shopt -s globstarএবং তারপর পরিবর্তন *করার জন্য **। যদি আপনার নামে "অবৈধ" অক্ষরযুক্ত ডিরেক্টরি থাকে তবে এটি সঠিকভাবে কাজ করবে না। আপনি এন +1 বার স্ক্রিপ্ট চালিয়ে কেবল এটিকে ঘিরে কাজ করতে পারেন যেখানে এন যে কোনও পথে অবৈধ অক্ষরের সাথে সর্বাধিক সংখ্যক ডিরেক্টরি রয়েছে। উদাহরণস্বরূপ, আপনার যদি একটি f@catডিরেক্টরি এবং তার dog#নীচে ডিরেক্টরি এবং তার নীচে ডিরেক্টরি থাকে তবে আপনার fox!চারবার স্ক্রিপ্ট চালানো দরকার।

    আমি নীচে এটি করার আরও ভাল উপায় দিচ্ছি।

  • slhck এর স্ক্রিপ্ট আসলে mv -iপরিবর্তে বলা উচিত mv। যদি আপনার কাছে ফাইলগুলি নামকরণ করা, বলুন cost+taxএবং cost-tax, থাকে, তবে স্ক্রিপ্টটি তাদের উভয়টির নাম বদলে দেবে costtax (বা cost_tax, আমরা সেই পরিবর্তন করার পরে)। এটি দ্বিতীয় ফাইলের সাথে প্রথম ফাইলটি ক্লোবার করবে। -i( আমি nteractive) বিকল্প কারণ হবে mvনিশ্চিতকরণ জন্য জিজ্ঞাসা করতে। আপনাকে ম্যানুয়ালি এই জাতীয় সংঘর্ষগুলি পরিচালনা করতে হবে।
  • "অবৈধ" অক্ষরগুলিকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন ${file//[^0-9A-Za-z.]}করতে ${file//[^0-9A-Za-z.]/_} (অথবা আরও ভাল, এখনও ${file//[^0-9A-Za-z._]/_}) পরিবর্তন করুন।

সুতরাং, উপরোক্ত পরিবর্তনগুলির সাথে স্লাহকের স্ক্রিপ্টটি হয়ে যায়

shopt -s globstar
for f in "$1"/**
do
  dir="$(dirname "$f")"
  file="$(basename "$f")"
  mv -i -- "$f" "${dir}/${file//[^0-9A-Za-z._]/_}"
done

এটি চলাকালীন, একটি আর্গুমেন্ট (যেমন, .) সরবরাহ করার বিষয়ে নিশ্চিত হোন ; অন্যথায় এটি ফাইল সিস্টেমের সমস্ত ফাইলের নাম পরিবর্তন করার চেষ্টা করবে (শুরু করে /)। $1যুক্তিটি নাল নয় তা যাচাই করার জন্য আপনার সম্ভবত স্ক্রিপ্টে কিছু রাখা উচিত ।


এটির নামগুলিতে অবৈধ অক্ষরযুক্ত ডিরেক্টরিতে সমস্যা রয়েছে কারণ উপরের নীচে নীচে শাখার সাথে **উপ গাছের নীচে সমস্ত ফাইল এবং ডিরেক্টরিগুলির তালিকায় প্রসারিত $1। সুতরাং, যদি আপনি f@cat/dog#, এটা দেখতে হবে f@catএবং f@cat/dog#আর্গুমেন্ট হিসাবে। সুতরাং এটির পুনঃনামকরণ f@catকরা হবে f_catএবং তারপরে অনুসন্ধান করা হবে f@cat/dog# - যা আর বিদ্যমান নেই, কারণ এটির নামকরণ করা হয়েছে f_cat/dog#। আমরা তা করে তা ঠিক করতে পারি

find "$1" -depth -name '*[^0-9A-Za-z._]*' -exec sh -c \
          'for f do dir="$(dirname "$f")"; file="$(basename "$f")";
          mv -i -- "$f" "${dir}/${file//[^0-9A-Za-z.]/_}"; done' sh {} +

-depthবিকল্পে findএটা নীচে টু টপ অর্ডার ডিরেক্টরিতে শাখা তাকান বলে। -nameডিরেক্টিভের এটা ফাইলের নাম যে শুধুমাত্র দেখুন ঘটায় প্রয়োজন নতুন নামকরণ করা হয়। (অন্য স্ক্রিপ্ট ত্রুটি বার্তা দেবে যখন এটি ফাইলগুলিকে নিজের নাম পরিবর্তন করার চেষ্টা করবে, কারণ তাদের নামগুলিতে কোনও অবৈধ অক্ষর নেই))  findতারপরে নামগুলি একটি শেলের সাথে প্রেরণ করে যা স্ক্রিপ্টের মতো একই কাজ করে তবে একক কমান্ড হিসাবে ।

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