You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何提取指定文件路径段?附basename提取文件名示例

嘿,刚接触Bash的话,处理路径确实有几个实用的小技巧,我来帮你搞定从示例路径里提取/home/pi这类层级路径的需求~

方法1:用dirname命令(最直观易懂)

dirname是专门用来获取文件所在目录的命令,非常适合新手上手:

  • 如果你先想拿到文件所在的直接目录/home/pi/images,直接这么写:
v='/home/pi/images/bird.png'
file_dir=$(dirname "${v}")
echo "$file_dir"  # 输出:/home/pi/images
  • 要是想再往上一级,拿到/home/pi,只要嵌套调用一次dirname就行,一步到位也可以:
# 分步写法
file_dir=$(dirname "${v}")
parent_dir=$(dirname "$file_dir")

# 一步到位写法
parent_dir=$(dirname "$(dirname "${v}")")
echo "$parent_dir"  # 输出:/home/pi
方法2:用Bash参数扩展(更高效,无需外部命令)

Bash本身自带字符串处理能力,用参数扩展处理路径不需要调用额外命令,效率更高:

  • 提取文件所在目录:${v%/*}的意思是从字符串末尾开始,删掉最后一个/及其后面的所有内容:
dir_path="${v%/*}"
echo "$dir_path"  # 输出:/home/pi/images
  • 提取上一级目录/home/pi:用${v%/*/*},也就是删掉最后两个/之间的内容:
parent_dir="${v%/*/*}"
echo "$parent_dir"  # 输出:/home/pi
方法3:用cut命令(按层级精准提取)

如果你明确知道要提取路径的前几个层级,可以用cut按/分割后选取对应片段:
比如你的路径/home/pi/images/bird.png按/分割后,得到的片段依次是""、home、pi、images、bird.png。要拿到/home/pi,就选取第1到第3段:

parent_dir=$(echo "${v}" | cut -d'/' -f1-3)
echo "$parent_dir"  # 输出:/home/pi

内容的提问来源于stack exchange,提问作者user3525290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:25:41