जवाबों:
dirname $file
वह है जो आप ढूंढ रहे हैं
dirname "$file"
बल्कि। यदि फ़ाइल या निर्देशिका नाम में रिक्त स्थान है, तो उद्धरण के बिना यह गलत व्यवहार करेगा।
dirname $file
उत्पादन होगा
stuff/backup
जो इसके विपरीत है basename
:
basename $file
उत्पादन होगा
file.zip
${file%/*}
जैसा कि आप बाहरी आदेश पर भरोसा नहीं करेंगे, उर्विन / लुफी द्वारा सुझाई गई तकनीक का उपयोग करना तकनीकी रूप से बेहतर है। बेसनेम को उसी तरह से पाने के लिए जैसा आप कर सकते थे ${file##*/}
। जब तक आपको आवश्यकता न हो, बाहरी आदेश का उपयोग करना अनावश्यक है।
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
यह पूरी तरह से POSIX अनुपालन भी होगा। आशा करता हूँ की ये काम करेगा! :-)
dirname
(अधिक कुशल) अंतर्निहित दृष्टिकोण पर एक फायदा है, और यदि आप निश्चित नहीं हैं कि आपका मार्ग शुरू करने के लिए पूरी तरह से योग्य है। अगर आपके पास है file=file.zip
, dirname "$file"
तो लौटेगा .
, जबकि ${file%/*}
वापस आएगा file.zip
।
case $file in */*) dir=${file%/*};; *) dir=.;; esac
अभी भी POSIX-y है और समस्या को संबोधित करता है।
directorypath
से प्राप्त करने के लिए filepath
:
file="stuff/backup/file.zip"
dirPath=${file%/*}/
echo ${dirPath}
बस उपयोग करें $ dirname /home/~username/stuff/backup/file.zip
यह वापस आ जाएगी /home/~username/stuff/backup/
dirname $file