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
相关产品推荐
相关产品推荐

