Linux dirname 和basename命令

本文详细介绍了Linux系统管理中dirname和basename指令的功能、用法及实例,帮助读者掌握如何从文件路径中提取目录部分和文件部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、dirname指令

1、功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

2、用法:dirname filename
例如下面几个例子

(1)# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
(2)# dirname /boot/grub/grub.conf
/boot/grub
(3)# dirname /etc/inittab
/etc
(4)# echo `pwd` && dirname modprobe.conf
/etc
.
(5)#echo `pwd` && dirname sysconfig/network-scripts/
/etc
sysconfig
Linux系统管理


二、basename指令

1、功能:从给定的包含绝对路径的文件名中去除左边目录部分或者同时去除某个后缀的内容(目录的部分),然后返回剩下的部分(非目录的部分)

2、用法:basename filename [suffix]
例如下面几个例子

(1)#basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
(2)#basename /boot/grub/grub.conf
grub.conf
bt4破解无线网络
(3)#echo `pwd` && basename sysconfig/network-scripts/
/etc
network-scripts
(4)# basename /boot/grub/grub.conf.bak .bak
grub.conf
(5)# basename /boot/grub/grub.conf.bak .conf.bak
grub



转载于:https://my.oschina.net/ylchou/blog/488451

<think>我们正在讨论的是命令行工具`dirname``basename`的功能差异及使用场景。这两个工具通常用于处理文件路径,提取路径中的目录部分或文件名部分。根据用户的问题,我们需要解释:1.`dirname`的作用:从文件路径中提取目录部分。2.`basename`的作用:从文件路径中提取文件名部分(包括扩展名)。3.两者的区别:一个取目录,一个取文件名。4.使用场景:在脚本中处理文件路径时,分别获取目录文件名的场景。另外,注意跨平台路径分隔符的问题(引用[2]中提到:统一使用`/`分隔符)。我们不需要引用其他无关内容(如重命名、数据类型、vscode配置、车牌识别等),只需专注于这两个命令。回答结构:1.分别介绍两个命令的功能,并给出示例。2.对比它们的差异。3.说明常见使用场景。4.提供一些组合使用的例子。5.生成相关问题。注意:使用中文回答,并在适当位置添加引用(引用[2]与路径操作相关,可以引用)。示例格式:###dirname命令功能:...示例:...###basename命令功能:...示例:...###区别与联系...###使用场景...###组合使用示例...§§相关问题§§1....2....</think>### `dirname` 与 `basename` 的功能差异及使用场景 #### 一、核心功能对比 | **命令** | **功能** | **输入示例** | **输出示例** | |-------------|--------------------------------------------------------------------------|-------------------------|------------------| | **`dirname`** | 提取文件路径中的**目录部分**(去除最后一个`/`后的内容) | `/home/user/docs/file.txt` | `/home/user/docs` | | **`basename`** | 提取文件路径中的**文件名部分**(最后一个`/`后的内容) | `/home/user/docs/file.txt` | `file.txt` | ```bash # 示例验证 $ dirname /home/user/docs/file.txt # 输出: /home/user/docs $ basename /home/user/docs/file.txt # 输出: file.txt ``` #### 二、关键特性详解 1. **`dirname` 的特殊行为**: - 若路径以`/`结尾(如目录路径),会返回**上级目录**: ```bash $ dirname /home/user/docs/ # 输出: /home/user ``` - 支持多路径处理(空格分隔): ```bash $ dirname /a/b /c/d.txt # 输出: /a /c ``` 2. **`basename` 的扩展功能**: - 通过 `-s` 选项**移除后缀**: ```bash $ basename -s .txt /path/file.txt # 输出: file ``` - 支持多路径处理: ```bash $ basename /a/b.txt /c/d.jpg # 输出: b.txt d.jpg ``` #### 三、使用场景对比 | **场景** | **推荐命令** | **示例命令** | **用途** | |-------------------------|--------------|---------------------------------------|------------------------------| | 获取文件所在目录 | `dirname` | `cd $(dirname /path/file)` | 快速切换到文件目录 | | 提取纯文件名 | `basename` | `cp file $(basename /backup/file.bak)` | 复制时保留原名 | | 批量修改文件扩展名 | `basename` | `mv $f $(basename -s .log $f).txt` | 将`.log`批量改为`.txt` | | 脚本中分离路径文件名 | 组合使用 | `dir=$(dirname $path); file=$(basename $path)` | 分别处理目录文件[^2] | #### 四、跨平台兼容性 - **路径分隔符**:两命令均支持 Linux 的`/` Windows 的`\`(建议统一用`/`)[^2] - **大小写敏感**: - Linux:严格区分大小写(`File.txt ≠ file.txt`) - Windows:不区分大小写(`File.txt = file.txt`) #### 五、组合使用示例 ```bash # 提取目录并创建备份文件 path="/data/reports/2024/sales.pdf" backup_dir=$(dirname "$path")/backups cp "$path" "$backup_dir/$(basename "$path").bak" # 输出结果: # 创建文件: /data/reports/2024/backups/sales.pdf.bak ``` > ⚠️ **注意**:路径操作前建议验证存在性: > ```bash > if [ -e "$path" ]; then > dir=$(dirname "$path") > # 后续操作... > fi > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值