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

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

【问题讨论】:

标签: string bash path


【解决方案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 并解决了问题。
      猜你喜欢
      • 1970-01-01
      • 2012-03-05
      • 2014-03-07
      • 2011-09-01
      • 2015-04-26
      • 2011-12-11
      • 1970-01-01
      相关资源
      最近更新 更多