在 Bash 脚本中使用 Linux Basename 命令 [示例]在 Bash 脚本中使用 Linux Basename 命令 [示例]在 Bash 脚本中使用 Linux Basename 命令 [示例]在 Bash 脚本中使用 Linux Basename 命令 [示例]
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

在 Bash 脚本中使用 Linux Basename 命令 [示例]

发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 中的 basename 命令打印文件路径中的最终组成部分。了解在 bash 脚本中使用 basename 命令的一些实际示例。

Linux 中的 basename 命令打印文件路径中的最终组成部分。这在您想要从长文件路径中提取文件名的 bash 脚本中特别有用。

让我用一些例子向您展示。

基本名称命令

basename 命令有两种语法。第一个涉及后缀:

basename PATH [suffix]

第二个允许您添加选项:

basename OPTION PATH

您不能将选项与后缀组合起来。暂时不要感到困惑。跟着例子看一下,你就会明白我想说什么。

使用带有文件路径的 basename 命令将给出文件名:

basename /home/user/data/filename.txt
filename.txt

实际上,basename 命令非常愚蠢。它并不能真正识别文件路径。它只是查找斜杠 (/) 并打印最后一个斜杠之后的内容。

例如,如果我通过删除文件名来运行上面的示例,则会产生以下结果。

basename /home/user/data
data

删除带后缀的文件扩展名

bash 命令的主要用途是从文件路径中提取文件名。您还可以在提取文件名时删除文件扩展名。

只需提及您想要从输出末尾删除的内容即可。假设您想从 filename.txt 中删除 .txt。只需将其添加到 basename 命令的末尾即可:

basename /home/user/data/filename.txt .txt
filename

您还可以使用 -s 选项作为后缀:

basename -s .txt /home/user/data/filename.txt
filename

后缀将从输入的最终组件的末尾删除。它并没有真正弄清楚文件的扩展名。如果您提供 txt(不带点)而不是 .txt,您将得到“文件名”(末尾带点)。

此外,如果您提供的后缀不在组件末尾,则输出将保持为没有后缀。

basename /home/user/data/filename.txt name
filename.txt

使用具有多个路径的基本名称

使用选项-a,您可以同时使用多个路径。

basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt

您可以将后缀选项 -s 与 -a 一起使用,但有一些限制。您只能为所有文件路径提供一个后缀。

basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2

您不能分配单独的足够。这是行不通的。

您还可以使用 NULL 分隔输出,而不是使用 -z 选项换行。

在 bash 脚本中使用基本名称

我展示了 basename 命令的一些示例。让我们看一下 bash 脚本中的几个基本名称示例。

假设您有一个文件路径变量,并且您希望将路径中的文件名存储在变量中。这可能是一个简单的脚本:

pathname="/home/dir/data/filename"

result=$(basename "$pathname")

echo $result

另一个例子是您想要重命名文件扩展名。当然,您可以使用rename命令批量重命名文件,但这只是一个示例。

因此,我编写了这个示例脚本,目的是替换文件扩展名:

for file in *$1; do
if [ -f $file ]; then
 mv $file `basename $file .$1`.$2
fi
done

您是否注意到我在 bash 脚本中检查了它是否是文件,这样它就不会更改匹配的目录?

您可以像这样使用上面的脚本:

./myscript.sh html htm

并将当前目录下所有以html结尾的文件重命名为htm。

这些只是几个例子。您可以根据您的要求使用它。

basename 命令与 dirname 命令互补。与 basename 不同,dirname 命令打印除最后一个组成部分之外的所有路径。

我希望您喜欢本教程。一如既往,请随时在评论部分提出问题或提供建议。

©2015-2025 Norria support@norria.com