dirname与basename命令

本文介绍了Linux命令行中dirname和basename的使用方法。dirname用于获取文件所在目录,basename则用于提取文件名部分。通过实例演示了如何利用这两个命令来增强脚本的可移植性和灵活性。

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

一:dirname

【`】,学名叫“倒引号”, 如果被“倒引号”括起来,  表示里面需要执行的是命令。
比如 `dirname $0`,  就表示需要执行   dirname $0  这个命令

【“”】 , 被双引号括起来的内容, 里面 出现  $ (美元号: 表示取变量名)  `(倒引号: 表示执行命令)   \(转义号: 表示转义),   其余的才表示字符串。
【’‘】,  被单引号括起来的内容, 里面所有的都表示串, 包括上面所说的  三个特殊字符。

在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。

这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。

$0:当前Shell程序的文件名
dirname $0,获取当前Shell程序的路径
cd `dirname $0`,进入当前Shell程序的目录

在/home/admin/test/下新建test.sh内容如下:
  1. cd `dirname $0`
  2. echo `pwd`
然后返回到/home/admin/执行
  1. sh test/test.sh
运行结果:
  1. /home/admin/test
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。


二:basename

basename命令用于去掉路径信息,返回纯粹的文件名,如果指定的文件的扩展名,则将扩展名也一并去掉。

<think>好的,我现在需要回答用户关于Linux shellbasename命令的使用方法的问题。用户已经提供了一些参考引用,我需要结合这些资料来整理出一个清晰准确的回答。 首先,我应该回顾用户提供的引用内容,看看每个引用提供了哪些信息。引用[1]提到basename用于处理目录路径,示例中使用了-a选项,这可能是指同时处理多个路径。引用[2]解释了basename的基本作用是从路径中提取纯文件名,并给出了一个简单的例子。引用[3]展示了如何在shell脚本中使用basename将文件名赋值给变量,这对于自动化处理文件很有帮助。引用[4]则提到了-s选项用于去除后缀,以及如何获取文件目录,但这里可能需要注意,因为通常获取目录使用的是dirname命令,而不是basename。不过引用[4]中的例子确实展示了使用-s来移除.txt后缀。 接下来,我需要将这些信息整合成一个结构化的回答。按照用户的要求,回答需要分步骤说明,结构清晰,并且每个部分可能需要结合示例。同时,要确保所有示例中的代码符合用户提到的格式要求,比如行内数学表达式使用$...$,但这里可能更多是代码块,所以需要用反引号包裹。 可能的结构如下: 1. 基本用法:去除路径,获取文件名。 2. 去除后缀:使用-s选项。 3. 处理多个路径:使用-a选项。 4. 在脚本中的应用:变量赋值。 5. 注意事项,比如dirname的区别。 同时,需要生成相关问题,这可能需要思考用户可能感兴趣的后续问题,例如basenamedirname的区别,或者如何结合其他命令使用basename。 需要检查是否有任何错误信息,比如引用[4]中提到“获取文件目录”,但basename通常用来获取文件名,而dirname才是获取目录部分。所以可能在引用[4]中的描述有误,或者用户提供的引用内容可能有误,需要确认。根据引用[4]的例子,basename -a -s .txt的两个文件处理后得到的是ztjzzz,去除了路径后缀,所以这部分是正确的。而引用[4]中提到的“获取文件目录”可能是一个错误,或者用户引用中的标签错误,但无论如何,在回答中应该正确说明basename的作用,而dirname用于获取目录。 因此,在回答中需要明确区分basenamedirname的不同用途,避免用户误解。 现在,开始整理每个部分的示例代码,确保使用正确的格式,比如代码块用三个反引号包裹,并标明语言。同时,注意用户提供的示例中引用的标识需要正确添加,比如在对应的解释后面加上[^1]、[^2]等。 可能还需要验证一些命令的实际效果,比如使用-a选项是否真的可以处理多个文件,根据引用[1]中的示例,输入两个路径,输出对应的文件名,所以是正确的。而-s选项的例子在引用[4]中是正确的。 总结步骤: 1. 基本语法示例。 2. 去除后缀的示例。 3. 处理多个路径的示例。 4. 脚本中的变量赋值示例。 5. 注意事项,如dirname的区别。 最后生成相关问题,例如关于选项的更多细节,其他命令的区别,常见错误处理等。</think>### basename命令详解 `basename`命令用于从文件路径中提取纯文件名或去除指定后缀,常用于脚本中对路径进行解析。以下是具体用法: --- #### 1. **基本语法:去除路径获取文件名** ```shell basename [路径] ``` **示例**: ```shell $ basename /usr/bin/bash bash ``` 此命令从路径`/usr/bin/bash`中提取出文件名`bash`。 --- #### 2. **去除文件后缀:`-s`选项** ```shell basename -s [后缀] [路径] ``` **示例**: ```shell $ basename -s .txt /root/ztj.txt ztj ``` 通过`-s .txt`移除文件后缀`.txt`,输出结果为`ztj`[^4]。 --- #### 3. **批量处理多个路径:`-a`选项** ```shell basename -a [路径1] [路径2] ... ``` **示例**: ```shell $ basename -a ~/workspace/shell_command ~/Documents/file.pdf shell_command file.pdf ``` `-a`允许同时处理多个路径,逐行输出文件名。 --- #### 4. **在脚本中赋值给变量** ```shell file_path="../data/config.yaml" file_name=$(basename "$file_path") echo "文件名: $file_name" # 输出: 文件名: config.yaml ``` 通过`$(basename ...)`将结果赋值给变量,便于后续操作[^3]。 --- #### 5. **注意事项** - **`dirname`的区别**:`basename`提取文件名,而`dirname`提取目录部分。 ```shell $ dirname /usr/bin/bash /usr/bin ``` - **路径末尾斜杠处理**:若路径以`/`结尾,`basename`会忽略斜杠。 ```shell $ basename /home/user/ user ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值