एक पूरी निर्देशिका की प्रतिलिपि करने के लिए स्थापित कमांड के साथ समस्या


16

इसलिए मेरे पास मेरी कुछ कॉन्फिग फाइलों के साथ रेपो है और मैं makefileउन्हें होमडेयर में स्थापित करने की कोशिश कर रहा हूं । मेरे पास समस्या यह है कि जब मैं निम्नलिखित कमांड को सीधे bash में चलाता हूं

install -m 755 -d ~/path/to/dotfilesDir/ ~/

प्रतीत होता है कि कुछ भी नहीं होता है

install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/

इरादा के अनुसार काम करता है।

पहला (आसान और साफ) समाधान काम क्यों नहीं करता है?



मैं सिर्फ आरपी के साथ सीपी का इस्तेमाल करता हूं। मैं सच में समझ में नहीं आता क्यों स्थापित है न -r विकल्प की तरह cp है।
इब्राहिम

जवाबों:


7

मैन पेज पर एक नज़र से , ऐसा लगता है कि installवह नहीं करेगा जो आप चाहते हैं।

दरअसल, सिनॉप्सिस अनुभाग प्रपत्र के उपयोग को इंगित करता है:

install [OPTION]... -d DIRECTORY...

और बाद में, मैन पेज कहता है:

-d, --directory
सभी तर्कों को निर्देशिका नामों के रूप में मानते हैं; निर्दिष्ट निर्देशिकाओं के सभी घटकों को बनाएँ

तो मुझे ऐसा लगता है कि इस विकल्प का बिंदु एक जटिल (लेकिन खाली) निर्देशिका संरचना ला ला स्थापित करने में सक्षम होना है mkdir -p ...

आप एक पाश के साथ जो चाहें हासिल कर सकते हैं:

for file in /path/to/DotFiles/dir/*;do
    install -m 755 "$file" ~/
done

या, यदि कई स्तर हैं /path/to/DotFiles/dir, तो आप उपयोग कर सकते हैं find:

find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +

निर्दिष्ट निर्देशिकाओं के सभी घटकों को बनाएँ = फाइलें नहीं बल्कि उपखंड बनाएं?
नाथद्वीप

@nathdwek राइट इस तरह से आप एक जटिल (कंकाल) निर्देशिका संरचना के तहत बना सकते हैं, कह सकते हैं, अपने घर की निर्देशिका का उपयोग करinstall -m 755 -d ~/foo/bar/baz
जोसेफ आर।

1
-exec 'install -m 755 "{}" ~/' +काम नहीं करने जा रहा है, कम से कम कुछ (सभी? अधिकांश?) लिनक्स के संस्करण पर नहीं। OSX या कुछ और पर काम कर सकते हैं। यदि आप एक oneliner चाहते हैं तो इस तरह से कुछ का उपयोग करना बहुत आगे है: 1. निर्देशिका पुनरावर्ती for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; doneबनाएँ : 2. पुनरावर्ती फ़ाइलें बनाएँ:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
जोश एम।

6

@ जोसेफ आर। के उत्तर से शुरू, यह मेरे लिए यह काम है कि मैं इसे अपनी आज्ञा से काम न कर सकूँ। (मुझे नहीं लगता कि यह लागू होता है, क्योंकि लागू होने वाले नियमों के लिए \+: {}तत्व के बाद कुछ भी नहीं हो सकता है ।) (मैं टिप्पणी नहीं कर सकता। यह पूरा पैराग्राफ वास्तव में हटाया जा सकता है।)

सभी फाइलों को उसी निर्देशिका में कॉपी करने के लिए (यहां target/directory):

find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;

-D यहाँ अनिवार्य नहीं है, यह लक्ष्य के लिए गैर-मौजूदा निर्देशिका बनाएगा।

एक पूरी निर्देशिका पदानुक्रम और उसकी फ़ाइलों (यह खाली निर्देशिकाओं को छोड़ देगा) की प्रतिलिपि बनाने के लिए जहाँ से आप वर्तमान में हैं:

find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;

जैसा कि कहा गया है, इससे शुरू होने वाले पेड़ को फिर से बनाया जाएगा $PWD। इसके अलावा, अगर आप खाली निर्देशिका कॉपी करने की जरूरत है, पर एक तरह से उपयोग करते हुए मिल सकता है -type dकी findऔर install -d

तो, पेड़ की नकल करने के लिए, एक निर्देशिका से शुरू करना जो कि नहीं है $PWD:

(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)

ध्यान दें कि कैसे parent/directoryनकल नहीं की जाती है।

अतिरिक्त

उपयोग करने वालों के लिए shell/fish, यहां वह पंक्ति है जो समान है:

fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.