在 Bash 中提取文件名和扩展名

介绍

您可能想要在 Bash 中提取文件的文件名和扩展名的原因有很多:

  • 操作文件名或扩展名 – 您可能想要提取文件名或扩展名以便对其进行修改,例如向文件名添加前缀或后缀,或更改文件扩展名。

  • 创建具有唯一名称的文件 – 您可能想要提取文件名和扩展名,以便创建具有唯一名称的新文件,例如通过向文件名添加时间戳或随机数。

  • 在脚本或命令中使用文件名或扩展名 – 您可能想要提取文件名或扩展名,以便将其用作脚本或命令的参数或输入,例如将其传递给程序或创建与目录同名的文件。

  • 从文件名或扩展名中提取信息 – 您可能想要提取文件名或扩展名,以便从中提取信息,例如日期或文件类型。

在本文中,我们将介绍在 Bash 中提取文件名和文件扩展名的三种最常见方法。 我们将研究每种方法并为您提供优缺点,以便您可以就哪种方法最适合您做出明智的决定。

方法1:使用 基本名 命令

basename 命令可用于从文件路径中提取文件名和扩展名:

filename=$(basename /path/to/file.txt)
echo $filename

虽然这种方法非常简单易用,但不幸的是,我们无法在不进行任何后处理的情况下仅提取文件名(不带扩展名)。

您也可以使用 dirname 单独提取目录路径的命令:

directory=$(dirname /path/to/file.txt)
echo $directory

优点:
  • 简单易用
  • 正确处理带空格的文件名
缺点:
  • 只提取文件名,无法单独提取扩展名,无需额外处理

方法2:使用参数扩展

Bash 提供了一个名为 参数扩展,它允许您使用特殊语法提取变量的一部分。 例如,您可以使用以下语法从存储在变量中的文件路径中提取文件名和扩展名:

filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename

还可以使用参数扩展来单独提取扩展名:

extension=${filename##*.}
echo $extension

优点:
  • 灵活
  • 可以分别提取文件名和扩展名,
  • 正确处理带空格的文件名
缺点:
  • 需要一个变量来存储文件路径

方法3:使用 AWK 命令

awk 命令是一个功能强大的文本处理工具,可用于提取字符串的一部分。 例如,您可以使用以下语法从文件路径中提取文件名和扩展名:

filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename

查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!

您还可以使用 awk 单独提取扩展名:

extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension

优点:
  • 强大
  • 可以分别提取文件名和扩展名
  • 正确处理带空格的文件名
缺点:
  • 某些用户可能不熟悉语法
  • 需要通过管道传输文件路径 awk

结论

总的来说,在 Bash 中提取文件的文件名和扩展名对于在 Bash shell 中处理文件和执行各种任务来说是一种有用的技术。

上述每种方法都有其自身的优点和缺点,最佳选择将取决于您的具体需求和偏好。 熟悉多种方法通常很有用,这样您就可以选择最适合您情况的一种。

时间戳记:

更多来自 堆栈滥用