यदि कोई मौजूद है तो सिमिलिंक बनाएं - अधिलेखित करें


54

मैं डेटा को नीचे ले जाना चाहता हूं /path/to/data/folder/month/date/hour/minute/fileऔर इसे /path/to/recent/fileहर बार फ़ाइल करने के लिए स्वचालित रूप से करता हूं।

यह मानते हुए कि मैं समय से पहले नहीं जानूंगा कि क्या /path/to/recent/fileमौजूद है, मैं इसे बनाने के बारे में कैसे जा सकता हूं (यदि यह मौजूद नहीं है) या इसे बदलने (अगर यह मौजूद है) तो मैं कैसे जा सकता हूं? मुझे यकीन है कि मैं सिर्फ यह देख सकता हूं कि क्या यह मौजूद है और फिर एक डिलीट, सिमलिंक करते हैं, लेकिन मैं सोच रहा हूं कि क्या कोई साधारण कमांड है जो मैं एक कदम में चाहता हूं।


यदि गंतव्य मौजूद है, लेकिन सिमिलिंक नहीं है, तो आप क्या करना चाहते हैं / होने की उम्मीद करते हैं?
टोबी स्पाइट

जवाबों:


34

कृपया मैनुअल पढ़ें ।

ln -sfn /new/target /path/to/symlink

$ आदमी ln

-n,
-no -dereference एक सामान्य फ़ाइल के रूप में LINK_NAME को एक निर्देशिका का प्रतीकात्मक लिंक मानती है


1
यह सही उत्तर क्यों है?
मचिफ

1
@ मेर्चिफ़ अगर /path/to/symlinkपहले से ही एक निर्देशिका के लिए सिम्लिंक है, -nध्वज के बिना , आपको /path/to/symlink/target/path/to/symlink
सिम्लिंक

ध्यान दें कि macOS में, यह अभी भी कुछ मामलों में काम नहीं करता है, उदाहरण के लिए, जब /path/to/symlinkमौजूद है और एक निर्देशिका है, और सिमिलिंक नहीं है। मुझे लगता है कि इसके आसपास काम करने का एकमात्र तरीका rm -rfपहले दौड़ना है ।
फ्लिम

78

इस का उद्देश्य है lnकी -fविकल्प: यह लिंक बनाने से पहले मौजूदा गंतव्य फ़ाइलें, यदि कोई हो, को हटा।

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

यदि आवश्यक हो (और पहले से मौजूद कुछ भी नहीं है तो ठीक काम कर रहा है) किसी भी मौजूदा फ़ाइल या किसी फ़ाइल के लिए सिमलिंक की /path/to/recent/fileओर इशारा करते हुए सिमलिंक बनाएंगे /path/to/data/folder/month/date/hour/minute/file

यदि कोई निर्देशिका, या किसी निर्देशिका में सिमलिंक, पहले से ही लक्षित नाम के साथ मौजूद है, तो सिम्लिंक इसके अंदर बनाया जाएगा (इसलिए आप /path/to/recent/file/fileऊपर दिए गए उदाहरण में समाप्त करेंगे )। -nविकल्प, के कुछ संस्करणों में उपलब्ध lnहै, तो आप के लिए निर्देशिका के लिए सिमलिंक का ख्याल रखना होगा, उन्हें आवश्यक के रूप में की जगह:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln निर्दिष्ट नहीं करता है -nइसलिए आप आम तौर पर इस पर भरोसा नहीं कर सकते। अधिकांश lnव्यवहार कार्यान्वयन-परिभाषित है, इसलिए आपको वास्तव में आपके द्वारा उपयोग किए जा रहे सिस्टम की बारीकियों की जांच करने की आवश्यकता है। यदि आप GNUln का उपयोग कर रहे हैं , तो आप निर्देशिकाओं की उपस्थिति में अपने व्यवहार को पूरी तरह से अनुमान लगाने के लिए -tऔर -Tविकल्पों का भी उपयोग कर सकते हैं ( अर्थात एक ही नाम के साथ मौजूदा निर्देशिका के अंदर लिंक बनाने के बजाय विफल)।

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