गुम निर्देशिका बनाने के लिए `ln` का उपयोग करें


10

इसलिए मैं एक छोटा पैकेज प्रबंधक लिख रहा हूं, और एक समस्या जो मैंने चलाई है वह फाइलों के प्रतीकात्मक लिंक को बना रही है।

यह करने के लिए पैकेज स्थापित करता है /usr/pkg/name-version, और फिर क्या प्रतीकात्मक लिंक बनाने के लिए एक फ़ाइल पढ़ता है। मैं lnलिंक बनाने के लिए उपयोग कर रहा हूं , और लिनक्स एपीआई हेडर को स्थापित करने की कोशिश करते समय मैं एक समस्या में चला गया हूं। मुझे हेडर फ़ाइलों को स्वयं से लिंक करने की आवश्यकता है, न कि उन फ़ोल्डरों की, जिनमें वे हैं (इसलिए यदि 2 पैकेजों में फ़ाइलों को एक ही उपनिर्देशिका में शामिल करने की आवश्यकता है, तो वे एक पैकेज को खराब किए बिना कर सकते हैं)।

वह समस्या मैंने हल कर दी, लेकिन lnयदि पथ अधूरा है तो बस त्रुटियां हैं, जो कि कष्टप्रद है क्योंकि उन निर्देशिकाओं का अस्तित्व तब तक नहीं होता जब तक कि पैकेज स्थापित नहीं हो जाता।

क्या इसके लिए कोई झंडा है lnजो किसी भी निर्देशिका को बनाएगा जो गायब हैं, या क्या मुझे कुछ जटिल bash स्क्रिप्ट के साथ जाना होगा?


1
मुझे कुछ स्पष्ट याद आ रहा है, लेकिन आप क्यों नहीं mkdir... निर्देशिका बना रहे हैं?
jw013

तुम भी बाहर की जाँच करना चाहते हो सकता है lndir
ams

जवाबों:


3

आपको एक जटिल बश स्क्रिप्ट की आवश्यकता नहीं होगी, लेकिन एक साधारण एक-लाइनर। mkdir --parentsसब कुछ का ख्याल रखना होगा, अच्छी तरह से भी एक त्रुटि नहीं मुद्रण अगर निर्देशिका संरचना पहले से मौजूद है।

बस आप इन निर्देशिकाओं को हटाने पर कैसे व्यवहार करते हैं, इससे सावधान रहें, ताकि आप अन्य पैकेजों को न तोड़ें।

इसके अलावा, जब से आप इसे लिख रहे हैं bash, आप टोना (बेशर्म प्लग) पर एक नज़र डाल सकते हैं । हो सकता है कि इसे केवल संशोधित करना आसान होगा, क्योंकि यह परिपक्व और लचीला है।


वाह, मैं यह उल्लेख करना भूल गया कि मैं इसे सी ++ में लिख रहा हूं, और सिस्टम () कॉल के साथ इंटरफेस बैश है क्योंकि यह आसान है। यह वही है जो मैंने हालांकि समाप्त किया, धन्यवाद।
क्रिस

@ क्रिस: 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.