Answers:
dirname $file
是您要寻找的
dirname "$file"
,而是。如果文件名或目录名中有空格,则不带引号会导致行为异常。
dirname $file
将输出
stuff/backup
与之相反basename
:
basename $file
将输出
file.zip
${file%/*}
由于您将不依赖外部命令,因此使用Urvin / LuFFy建议的类似方法在技术上会更好。以相同的方式获取基本名称${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并解决了这个问题。
只需使用 $ dirname /home/~username/stuff/backup/file.zip
它将返回 /home/~username/stuff/backup/
dirname $file