帮助中心
Linux basename命令初学者教程

Linux basename命令初学者教程


有时,在命令行下工作(尤其是处理 shell 脚本时),你可能只对文件名感兴趣,但你能得到的是文件的完整路径。因此,我们需要删除路径中的目录部分。


Linux 中的 basename 命令是一种实用工具,用于提取文件或目录路径的基本名称,有效去除任何前导目录组件和可选后缀。当提供完整路径时,basename 只返回文件名或路径的最后一段,因此在脚本和文件操作任务中非常有用。例如,如果路径为 /home/user/document.txt,basename 将返回 document.txt。此外,用户还可以指定要删除的后缀,如 .txt,只留下 document。该命令简化了脚本中对文件名和路径的处理,提高了自动化程度并简化了各种文件管理流程。


本教程将通过简单易懂的示例讲解 "basename "的基础知识。但在开始之前,值得一提的是,这里的所有示例都是在 Ubuntu 24.04 LTS 机器上测试的。


Linux basename 命令解释


basename 命令允许你从文件名中删除不需要的组件。以下是该工具的语法:

basename NAME [SUFFIX]
basename OPTION... NAME...

下面是手册页面对它的介绍:

basename - strip directory and suffix from filenames

Print NAME with any leading directory components removed. If specified, also remove a trailing
SUFFIX.

下面是一些问答式的示例,可以让你很好地了解 basename 命令是如何工作的。


Q1. basename 命令如何运行?


默认情况下,如果以文件的完整路径作为输入运行 "basename "命令,该命令会在输出中返回文件名。例如,当我执行以下命令时:

basename /home/himanshu/Downloads/analytics.pdf

得到的输出结果如下

analytics.pdf

Q2. basename 可以处理多个输入吗?


可以。但要做到这一点,必须使用 -a 命令行选项。例如,当我执行以下命令时:

basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

下面是我得到的输出结果:

analytics.pdf
test.png


Q3. 如何让基础名称也带文件扩展名?


有时,您可能只想获取文件名而不想获取扩展名。这可以使用 -s 命令行选项(需要将后缀作为输入)来实现。


例如,下面的命令

basename -s .pdf /home/himanshu/Downloads/analytics.pdf

会产生以下输出

analytics


Q4. 如何使每行输出以 NUL 结束?


默认情况下,输出中使用换行符作为分隔符。不过,如果需要,可以强制 basename 使用 NUL 作为分隔符。这可以使用 -z 命令行选项来实现。


例如

basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

输出结果如下

analytics.pdftest.png

所以这里看不到 NUL 字符。你需要将输出重定向到一个文件,然后用 vim 等编辑器打开该文件。下面是 vim 显示的内容:


结论


正如你所看到的,basename 并不是一个功能丰富的命令--它的选项很有限,本教程已经讨论了其中的大部分。在完成这些练习后,请访问该工具的 man 页面了解更多信息。

文章相关标签: Linux basename命令
购物车