在 Bash 脚本中使用 Linux Basename 命令 [示例]
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 命令打印除最后一个组成部分之外的所有路径。
我希望您喜欢本教程。一如既往,请随时在评论部分提出问题或提供建议。