linux - पूर्ण पथ बनाने के लिए दो तारों को कैसे मिलाएं




bash (4)

मैं एक बैश स्क्रिप्ट लिखने की कोशिश कर रहा हूं। इस स्क्रिप्ट में मैं चाहता हूं कि उपयोगकर्ता एक निर्देशिका का पथ दर्ज करें। फिर मैं इस तार के अंत में कुछ तार जोड़ना चाहता हूं और कुछ उपनिर्देशिकाओं के लिए एक पथ बनाना चाहता हूं। उदाहरण के लिए मान लें कि उपयोगकर्ता इस तरह एक स्ट्रिंग में प्रवेश करता है:

/home/user1/MyFolder

अब मैं इस निर्देशिका में 2 उपनिर्देशिकाएँ बनाना चाहता हूँ और वहाँ कुछ फ़ाइलों की प्रतिलिपि बनाना चाहता हूँ।

/home/user1/MyFolder/subFold1
/home/user1/MyFolder/subFold2

मैं यह कैसे कर सकता हूँ?


POSIX मानक बताता है कि एकाधिक / को एक फ़ाइल नाम में एकल / रूप में माना जाता है। इस प्रकार //dir///subdir////file /dir/subdir/file

इस तरह के रूप में एक पूर्ण पथ का निर्माण करने के लिए दो तारों को जोड़ना सरल है:

full_path="$part1/$part2"

क्या आप चाहते हैं कि आपके पथ के हिस्से के हिस्से को बस समाप्‍त नहीं करना है?

$ base="/home/user1/MyFolder"
$ subdir="subFold1"
$ new_path=$base$subdir
$ echo $new_path
/home/user1/MyFoldersubFold1

फिर आप आवश्यकतानुसार फ़ोल्डर / निर्देशिका बना सकते हैं।


यह खाली डायर के लिए काम करना चाहिए (आपको यह जांचने की आवश्यकता हो सकती है कि क्या दूसरा तार शुरू होता है / जिसे एक पूर्ण पथ के रूप में माना जाना चाहिए?):

#!/bin/bash

join_path() {
    echo "${1:+$1/}$2" | sed 's#//#/#g'
}

join_path "" a.bin
join_path "/data" a.bin
join_path "/data/" a.bin

आउटपुट:

a.bin
/data/a.bin
/data/a.bin

संदर्भ: शेल पैरामीटर विस्तार


#!/bin/bash

read -p "Enter a directory: " BASEPATH

SUBFOLD1=${BASEPATH%%/}/subFold1
SUBFOLD2=${BASEPATH%%/}/subFold2

echo "I will create $SUBFOLD1 and $SUBFOLD2"

# mkdir -p $SUBFOLD1
# mkdir -p $SUBFOLD2

और यदि आप रीडलाइन का उपयोग करना चाहते हैं तो आप पूरा कर लें और वह सब, read लिए कॉल में a -e जोड़ें:

read -e -p "Enter a directory: " BASEPATH




bash