অনুপস্থিত ডিরেক্টরি তৈরি করতে `ln` ব্যবহার করুন


10

সুতরাং আমি একটি ছোট প্যাকেজ ম্যানেজার লিখছি, এবং আমি যে সমস্যাটি চালিয়ে যাচ্ছি তা ফাইলগুলির প্রতীকী লিঙ্কগুলি তৈরি করা।

এটি প্যাকেজটি ইনস্টল করে /usr/pkg/name-versionএবং তারপরে কোন প্রতীকী লিঙ্কগুলি বানাতে হবে তা নির্ধারণ করার জন্য একটি ফাইল পড়ে। আমি lnলিঙ্কগুলি তৈরি করতে ব্যবহার করছি এবং লিনাক্স এপিআই হেডারগুলি ইনস্টল করার চেষ্টা করার সময় আমি একটি সমস্যার মধ্যে পড়েছি। আমার নিজের হেডার ফাইলগুলি লিঙ্ক করতে হবে, সেগুলিতে থাকা ফোল্ডারগুলি নয় (সুতরাং যদি 2 টি প্যাকেজগুলিকে একই প্যাকেজ আপ না করে একই সাবডিরেক্টরিতে ফাইল অন্তর্ভুক্ত করা উচিত)।

এই সমস্যাটি আমি সমাধান করেছি, তবে lnপথটি অসম্পূর্ণ হলে কেবল ত্রুটিগুলি আউট হয়, যা বিরক্তিকর কারণ প্যাকেজটি ইনস্টল না হওয়া অবধি ডিরেক্টরিগুলি উপস্থিত থাকা উচিত নয়।

এর জন্য কি কোনও পতাকা রয়েছে lnযা অনুপস্থিত এমন কোনও ডিরেক্টরি তৈরি করবে বা আমি কি কিছু সংশ্লেষিত বাশ স্ক্রিপ্ট নিয়ে যেতে চাইছি?


1
আমি স্পষ্টত কিছু মিস করছি, তবে আপনি কেন mkdir... ডিরেক্টরি তৈরি করতে ব্যবহার করছেন না ?
jw013

আপনিও চেক আউট করতে চাইতে পারেন lndir
এএমএস

উত্তর:


3

আপনার কোনও সংশ্লেষিত বাশ স্ক্রিপ্টের প্রয়োজন হবে না, তবে একটি সাধারণ ওয়ান-লাইনার। mkdir --parentsডিরেক্টরি কাঠামো ইতিমধ্যে বিদ্যমান থাকলে খুব সুন্দরভাবে একটি ত্রুটি মুদ্রণও করবে না, সমস্ত কিছুর যত্ন নেবে।

আপনি এই ডিরেক্টরিগুলি অপসারণের সাথে কীভাবে ব্যবহার করেন সে সম্পর্কে যত্নবান হন, যাতে আপনি অন্যান্য প্যাকেজগুলি ভাঙেন না।

এছাড়াও, যেহেতু আপনি এটি লিখন করছেন bash, আপনি যাদুবিদ্যার (নির্লজ্জ প্লাগ) একবার দেখে নিতে পারেন । এটি কেবল পরিমার্জন করা সহজ হবে, কারণ এটি পরিপক্ক এবং নমনীয়।


ওফস, আমি উল্লেখ করতে ভুলে গেছি যে আমি এটি সি ++ তে লিখছি, এবং সিস্টেম () কলগুলির সাথে ইন্টারফ্যাক্স করছি কারণ এটি সহজ। ধন্যবাদ, ধন্যবাদ দিয়েই এই কাজটি শেষ করেছি।
ক্রিস

@Chris: system()না আরো সহজ, এটা খুবই কঠিন সাথে যথাযথভাবে কমান্ড লাইন আর্গুমেন্ট অব্যাহতি system()। খুব কমপক্ষে আপনার ব্যবহার করা উচিত posix_spawn()বা fork()+exec*(), যা কমান্ড লাইন আর্গুমেন্টগুলিকে অ্যারে হিসাবে গ্রহণ করে।
মিথ্যা রায়ান

4

এটি করার জন্য কোনও পতাকা নেই ln। ডিরেক্টরি তৈরি করা এর কাজ নয়।

mkdir -p foo/bar/quxতৈরি করা হবে foo, foo/barএবং foo/bar/quxপ্রয়োজন হিসাবে। সুতরাং mkdir -pপ্রথমে সর্বশেষ পথের উপাদানটি বাদে সকলকে কল করুন।

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


0

হয়তো tarলিঙ্ক সহ ফাইল প্রস্তুত করতে সাহায্য করতে পারে:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

এবং তারপরে প্রয়োজনীয় লিঙ্কগুলি তৈরি করতে:

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