LINUX: सभी फ़ाइलों को एक से दूसरी निर्देशिका से लिंक करें [बंद]


123

मैं लिंक करने के लिए (चाहते हैं ln -s) सभी फ़ाइलें में हैं /mnt/usr/lib/में/usr/lib/

बहुत सारी फाइलें हैं, इसे जल्दी कैसे किया जा सकता है? :)


कितनी फाइलें "बहुत" है, और आप कितनी तेजी से "तेज" डेम करते हैं?
एरिक स्मिथ

4
यह 50:50 है कि क्या यह "सर्वरफॉल्ट" या "सुपरसुअर" फिट होगा, लेकिन यह प्रोग्रामिंग नहीं है, इसलिए स्टैकओवरफ्लो के लिए नहीं।
मार्क Gravell

जवाबों:


202
ln -s /mnt/usr/lib/* /usr/lib/

मुझे लगता है, यह सुपरयूजर का है, हालांकि।


6
इसमें छिपी हुई फाइलें शामिल नहीं हैं, और यह पूरी निर्देशिकाओं को जोड़ता है। यदि इनमें से कोई भी ऐसा नहीं है जो आप चाहते हैं, तो मेरा उत्तर देखें। अन्यथा, यह सबसे छोटा तरीका है।
Cascabel

आप सही हे। लेकिन आमतौर पर पुस्तकालयों को छिपाया नहीं जाता है। किसी भी मामले में डॉटफ़ाइल्स शामिल हैं आपका समाधान अधिक काम आता है।

1
क्या यह अन्य फ़ोल्डर को स्थायी रूप से इंगित करेगा?
nmkyuppie

@YuPPie मुझे लगता है, यह सिर्फ निर्देशिका में हर फ़ाइल के लिए हार्डलिंक बनाता है। (यह वही है जो मैं आज चाहता था, इसलिए +1: D)
प्रदर्शित नाम

2
@ सर्जबॉर्श यह प्रतीकात्मक लिंक बनाता है (हार्ड लिंक अलग हैं)।
jsejcksn

90

GNU cpमें कॉपी करने के बजाय सिम्बल बनाने का विकल्प होता है।

cp -rs /mnt/usr/lib /usr/

ध्यान दें कि यह एक GNU एक्सटेंशन है जो POSIX मेंcp नहीं मिला है


4
आपकी वर्तमान निर्देशिका इस तरह से प्रतीकात्मक कड़ी बनाने के लिए / usr / होनी चाहिए
Soul_man

@ caf यदि गंतव्य मौजूदा फ़ोल्डर है, तो लिबर फ़ोल्डर अंदर / usr / फ़ोल्डर में बनाया जाता है
तमिल सेल्वन सी

2
अच्छा उत्तर। -S के बजाय -l के साथ हार्डलिंक बनाने के लिए भी इस्तेमाल किया जा सकता है।
फैक्स


15

पोस्ट किए गए समाधान किसी भी छिपी हुई फ़ाइलों को लिंक नहीं करेंगे। उन्हें शामिल करने के लिए, यह प्रयास करें:

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

यदि आपको निर्देशिकाओं को पुन: बनाने और केवल लिंक फ़ाइलों को बनाने की इच्छा होनी चाहिए (ताकि यदि आप किसी निर्देशिका के भीतर कोई फ़ाइल बनाते हैं, तो यह वास्तव में /usr/libनहीं है /mnt/usr/lib), आप ऐसा कर सकते हैं:

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

2
मेरा मानना ​​है कि इसे छिपी हुई फ़ाइलों में वाइल्डकार्ड के लिए भी काम करना चाहिए, यदि आपने बैश में मोड़े हुए ग्लोबिंग को बढ़ाया है। यह एक डॉट के साथ शुरू होने वाली सभी चीजों से मेल खाता है, इसके बाद कुछ नहीं या किसी अन्य डॉट के अलावा (यानी इसे बाहर करता है ./और ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.