String 从路径中提取目录
在我的脚本中,我需要处理的文件的目录。例如,文件=“stuff/backup/file.zip”。我需要一种从变量String 从路径中提取目录,string,bash,path,String,Bash,Path,在我的脚本中,我需要处理的文件的目录。例如,文件=“stuff/backup/file.zip”。我需要一种从变量$file获取字符串“stuff/backup/”的方法 dirname $file 这就是你要找的 dirname $file 将输出 stuff/backup 它与basename相反: basename $file 将输出 file.zip 只需使用$dirname/home/~username/stuff/backup/file.zip 它将返回/home/~use
$file
获取字符串“stuff/backup/”的方法
dirname $file
这就是你要找的
dirname $file
将输出
stuff/backup
它与basename
相反:
basename $file
将输出
file.zip
只需使用
$dirname/home/~username/stuff/backup/file.zip
它将返回
/home/~username/stuff/backup/
,以便从文件路径
获取目录路径
:
file="stuff/backup/file.zip"
dirPath=${file%/*}/
echo ${dirPath}
使用Urvin/LuFFy建议的
${file%/*}
在技术上更好,因为您不需要依赖外部命令。要以相同的方式获取basename,可以执行${file##*/}
。除非需要,否则没有必要使用外部命令
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
通过这种方式,它也将完全兼容POSIX。希望有帮助!:-) +1,比我快。本可以更快,但被提示输入的不仅仅是
dirname$file
dirname“$file”
。如果没有引号,如果文件或目录名有空格,这将是错误的。fml,问题应该是从文件中提取绝对目录,我该如何做?dirname产生了相对路径,我想在win Batch脚本中实现这一点非常困难——我想这是不使用它们的另一个原因!我想马特可以从那里猜出来(曼迪纳姆):)我想我们都是马特在这里。只是猜测而已。但我只是想把我的答案和你的区别开来是的,我也经常使用basename,它非常漂亮=),但是我在google上找不到任何关于返回文件目录的信息!我想我找的词不对。哈,我们三个都是马特的d考虑添加必要的引号,以确保这些命令与包含空格的名称(全局字符等)一起工作。有一种情况下,dirname
比(更高效的)内置方法更具优势,这就是如果您不确定您的路径是否完全合格。如果您有file=file.zip
,dirname“$file”
将返回
,而${file%/*}
将返回file.zip
…当然,您可以分支:case$file in*/*)dir=${file%/*};*)dir=。;;esac仍然是POSIX-y,解决了这个问题。重复项:,