In my script I need the directory of the file I am working with. For example, the file="stuff/backup/file.zip". I need a way to get the string "stuff/backup/" from the variable $file.
5 Answers
dirname $file is what you are looking for
4dirname $file will output
stuff/backup which is the opposite of basename:
basename $file would output
file.zip 4Using ${file%/*} like suggested by Urvin/LuFFy is technically better since you won't rely on an external command. To get the basename in the same way you could do ${file##*/}. It's unnecessary to use an external command unless you need to.
file="/stuff/backup/file.zip" filename=${1##*/} # file.zip directory=${1%/*} # /stuff/backup It would also be fully POSIX compliant this way. Hope it helps! :-)
2For getting directorypath from the filepath:
file="stuff/backup/file.zip" dirPath=${file%/*}/ echo ${dirPath} 0Simply use $ dirname /home/~username/stuff/backup/file.zip
It will return /home/~username/stuff/backup/