में डायरनाम का अंतिम भाग कैसे प्राप्त करें मान लीजिए मेरे पास /from/here/to/there.txt
फ़ाइल है, और /from/here/to
के बजाय अपने डायरनाम to
का अंतिम भाग प्राप्त करना चाहता हूं, मुझे क्या करना चाहिए?बैश
बैश
उत्तर
dirname
के विपरीत basename
है:
basename "$(dirname "/from/here/to/there.txt")"
शुद्ध मार रास्ता:
s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
आप basename
उपयोग कर सकते हैं, भले ही यह एक फ़ाइल नहीं है। dirname
का उपयोग कर फ़ाइल नाम बंद पट्टी, तो basename
का उपयोग स्ट्रिंग के अंतिम तत्व प्राप्त करने के लिए:
$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
कमांड '$ dir = "$ (dirname $ dir)"' मेरे लिए काम नहीं करता है, लेकिन 'dir = "$ (dirname $ dir)"' ठीक काम करता है। –
जब मैं इसे स्थापित कर रहा हूं तो मुझे 'dir' के सामने डॉलर नहीं होना चाहिए था। –
हां, अब सबकुछ ठीक काम करता है। धन्यवाद :) –
bash
स्ट्रिंग कार्यों का उपयोग करना awk
ऐसा करने का तरीका होगा:
awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"
स्पष्टीकरण: के रूप में "/"
-F'/'
सेट क्षेत्र विभाजक दूसरी अंतिम क्षेत्र$(NF-1)
<<<
मानक इनपुट के रूप में यह करने के बाद कुछ भी उपयोग करता (wiki explanation)
एक और तरीका
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
उपयोग करने के लिए सरल: 'printf"% s \ n "" $ {x [-2]} "'। –
@gniourf_gniourf, आप सही हैं, धन्यवाद। संपादित – iruvar
एक:
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/hear/to"
dir="$(basename $dir)" # Returns just "to"
यह प्रश्न कुछ है THIS।
सुलझाने जो आप कर सकते के लिए:
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
बैश parameter expansion का उपयोग करके, आप यह कर सकते हैं:
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)
यह अधिक कुशल है क्योंकि कोई बाहरी आदेश उपयोग नहीं किया जाता है।
मैंने अभी इसका परीक्षण किया। कोड:: #/bin/श सीडी/var/SVN/रेपोस पथ = "$ 1" गूंज "$ {पथ}" dir = "$ {पथ% FreeBSD पर यहाँ मेरी परिणाम हैं/*} " गूंज" $ {dir} " वास्तविक =" $ {dir ## * /} " गूंज" $ {वास्तविक} " --------------- ------------------------- परिणाम: $ ./makerepo.sh/var/test /var/test /var var $ ------------------------------------ फ़ै एल! माफ़ कीजिये। एक अच्छी विधि माना लेकिन सही जवाब नहीं। –
कोई बात नहीं। मुझे बस एहसास हुआ कि क्या हुआ! –
अगर फ़ाइल में कोई बिंदु नहीं है तो काम नहीं करेगा। यदि निर्देशिका में डॉट '.' है तो काम नहीं करेगा। इसे सरल रखें और स्लीश '/' को डिलीमीटर के रूप में उपयोग करें। – alvits
अब सही किया गया ... – anubhava
धन्यवाद बहुत धन्यवाद @ अक्षय – anubhava