मान लीजिए कि मेरे पास एक फ़ाइल है /from/here/to/there.txt, और मैं इसके toबजाय इसके dirname का केवल अंतिम भाग प्राप्त करना चाहता /from/here/toहूं, मुझे क्या करना चाहिए?
जवाबों:
basenameभले ही यह फ़ाइल नहीं है, आप इसका उपयोग कर सकते हैं । फ़ाइल नाम का उपयोग करके स्ट्रिप करें dirname, फिर basenameस्ट्रिंग के अंतिम तत्व को प्राप्त करने के लिए उपयोग करें:
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/here/to"
dir="$(basename $dir)" # Returns just "to"
dirजब मैं इसे सेट कर रहा हूं तो मेरे सामने डॉलर नहीं होना चाहिए था ।
के विपरीत dirnameहै basename:
basename "$(dirname "/from/here/to/there.txt")"
bashस्ट्रिंग कार्यों का उपयोग करना :
$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
बैश पैरामीटर विस्तार का उपयोग करते हुए , आप ऐसा कर सकते हैं:
path="/from/here/to/there.txt"
dir="${path%/*}" # sets dir to '/from/here/to' (equivalent of dirname)
last_dir="${dir##*/}" # sets last_dir to 'to' (equivalent of basename)
यह अधिक कुशल है क्योंकि कोई बाहरी कमांड का उपयोग नहीं किया जाता है।
awkइसे करने का एक तरीका होगा:
awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"
स्पष्टीकरण:
-F'/' फ़ील्ड विभाजक को "/" के रूप में सेट करता है$(NF-1)<<<मानक इनपुट ( विकी स्पष्टीकरण ) के रूप में इसके बाद कुछ भी उपयोग करता हैएक और तरीका
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
printf "%s\n" "${x[-2]}":।
यह प्रश्न कुछ इस तरह है ।
हल करने के लिए जो आप कर सकते हैं:
DirPath="/from/here/to/there.txt"
DirPath="$(dirname $DirPath)"
DirPath="$(basename $DirPath)"
echo "$DirPath"
जैसा कि मेरे दोस्त ने कहा कि यह संभव है:
basename `dirname "/from/here/to/there.txt"`
अपने पथ के किसी भी भाग को प्राप्त करने के लिए:
echo "/from/here/to/there.txt" | awk -F/ '{ print $2 }'
OR
echo "/from/here/to/there.txt" | awk -F/ '{ print $3 }'
OR
etc
पूछे गए प्रश्न के लिए शीर्ष उत्तर बिल्कुल सही है। लंबे पथ के बीच में आवश्यक निर्देशिका के साथ अधिक सामान्य मामले में, यह दृष्टिकोण कोड को पढ़ने के लिए एक कठिन होता है। उदाहरण के लिए :
dir="/very/long/path/where/THIS/needs/to/be/extracted/text.txt"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(basename $dir)"
इस मामले में एक का उपयोग कर सकते हैं:
IFS=/; set -- "/very/long/path/where/THIS/needs/to/be/extracted/text.txt"; set $1; echo $6
THIS