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