从路径中提取目录[重复]

Posted

技术标签:

【中文标题】从路径中提取目录[重复]【英文标题】:Extract directory from path [duplicate] 【发布时间】:2011-09-24 11:27:03 【问题描述】:

在我的脚本中,我需要我正在使用的文件的目录。例如,文件=“stuff/backup/file.zip”。我需要一种从变量$file 中获取字符串“stuff/backup/”的方法。

【问题讨论】:

重复:get parent directory of a file in bash、Get the parent directory of a given file、Getting the parent of a directory in Bash @phuclv 这个问题是在 2011 年 6 月 28 日提出的,在所有链接的问题发布之前(分别于 2016 年 11 月 20 日、2017 年 3 月 16 日和 2011 年 12 月 8 日) )。 @Edwin 时间与 SO 无关。 The question with a better set of answers remain open 【参考方案1】:
dirname $file

就是你要找的东西

【讨论】:

+1,打败我。本来会更快,但被提示输入超过dirname $file dirname "$file",而是。如果文件或目录名称包含空格,则如果没有引号,则会出现异常。 fml,问题应该是从文件中提取绝对目录,我该怎么做? dirname 产生我猜的相对路径 在 Win Batch 脚本中实现这一点非常困难——我想这是不使用它们的另一个原因!【参考方案2】:
dirname $file

会输出

stuff/backup

basename相反:

basename $file

会输出

file.zip

【讨论】:

我认为马特可以从那里找到它(man dirname):) 我想我们都是马特的。只是一个猜测。但我只是想区分我的答案和你的答案。 =) 是的,我也经常使用 basename,它非常漂亮 =) 但我找不到任何关于在 google 上返回文件目录的信息!我想我没有找到正确的词。哈,我们三个都是马特的? :D 考虑添加必要的引号以确保这些命令适用于包含空格(全局字符等)的名称。【参考方案3】:

只需使用$ dirname /home/~username/stuff/backup/file.zip

它将返回/home/~username/stuff/backup/

【讨论】:

【参考方案4】:

filepath 获取directorypath

file="stuff/backup/file.zip"
dirPath=$file%/*/
echo $dirPath

【讨论】:

【参考方案5】:

像 Urvin/LuFFy 建议的那样使用 $file%/* 在技术上更好,因为您不会依赖外部命令。要以与$file##*/ 相同的方式获取基本名称。除非需要,否则无需使用外部命令。

file="/stuff/backup/file.zip"
filename=$1##*/     # file.zip
directory=$1%/*     # /stuff/backup

这样也完全符合 POSIX。希望能帮助到你! :-)

【讨论】:

一个 的情况,dirname 比(更有效的)内置方法有优势,那就是如果你不确定你的路径是否完全- 有资格开始。如果你有file=file.zipdirname "$file" 将返回.,而$file%/* 将返回file.zip ...当然,您可以分支:case $file in */*) dir=$file%/*;; *) dir=.;; esac 仍然是 POSIX-y 并解决了问题。

以上是关于从路径中提取目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式从字符串中提取文件名[重复]

在两组下划线之间提取字符串的Regex [重复] 。

小结

PHP提取zip [重复]

C#从文本文件中读取路径说路径不存在[重复]

华为python机试题目:整数与IP地址间的转换图片整理字串的连接最长路径查找提取不重复的整数字符串合并处理字符串最后一个单词的长度删除字符串中出现次数最少的字符