有时,在命令行下工作(尤其是处理 shell 脚本时),你可能只对文件名感兴趣,但你能得到的是文件的完整路径。因此,我们需要删除路径中的目录部分。
Linux 中的 basename 命令是一种实用工具,用于提取文件或目录路径的基本名称,有效去除任何前导目录组件和可选后缀。当提供完整路径时,basename 只返回文件名或路径的最后一段,因此在脚本和文件操作任务中非常有用。例如,如果路径为 /home/user/document.txt,basename 将返回 document.txt。此外,用户还可以指定要删除的后缀,如 .txt,只留下 document。该命令简化了脚本中对文件名和路径的处理,提高了自动化程度并简化了各种文件管理流程。
本教程将通过简单易懂的示例讲解 "basename "的基础知识。但在开始之前,值得一提的是,这里的所有示例都是在 Ubuntu 24.04 LTS 机器上测试的。
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 命令是如何工作的。
默认情况下,如果以文件的完整路径作为输入运行 "basename "命令,该命令会在输出中返回文件名。例如,当我执行以下命令时:
basename /home/himanshu/Downloads/analytics.pdf
得到的输出结果如下
analytics.pdf
可以。但要做到这一点,必须使用 -a 命令行选项。例如,当我执行以下命令时:
basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
下面是我得到的输出结果:
analytics.pdf
test.png
有时,您可能只想获取文件名而不想获取扩展名。这可以使用 -s 命令行选项(需要将后缀作为输入)来实现。
例如,下面的命令
basename -s .pdf /home/himanshu/Downloads/analytics.pdf
会产生以下输出
analytics
默认情况下,输出中使用换行符作为分隔符。不过,如果需要,可以强制 basename 使用 NUL 作为分隔符。这可以使用 -z 命令行选项来实现。
例如
basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
输出结果如下
analytics.pdftest.png
所以这里看不到 NUL 字符。你需要将输出重定向到一个文件,然后用 vim 等编辑器打开该文件。下面是 vim 显示的内容:
正如你所看到的,basename 并不是一个功能丰富的命令--它的选项很有限,本教程已经讨论了其中的大部分。在完成这些练习后,请访问该工具的 man 页面了解更多信息。
上一条: 西班牙.ES域名注册要求
下一条: 英国.UK域名的种类和注册要求