在 Bash 中读取不带扩展名的文件名 您所在的位置:网站首页 后缀为bin的文件怎么删除 在 Bash 中读取不带扩展名的文件名

在 Bash 中读取不带扩展名的文件名

2024-06-01 03:45| 来源: 网络整理| 查看: 265

在 Bash 中读取不带扩展名的文件名

Linux 用户出于多种目的需要定期使用文件。有时,用户只需要通过删除文件扩展名来读取文件的基本名称。 Linux 中文件名和扩展名可以通过多种方式分离并存储在不同的变量中。 Bash 内置命令和 shell 参数扩展可用于删除文件的扩展名。本教程将介绍如何使用上述方式读取不带扩展名的文件名。

使用 `basename` 命令读取文件名

`basename` 命令用于从目录或文件路径读取不带扩展名的文件名。

语法:

basename NAME [SUFFIX]

或者

basename OPTION... NAME...

这里,NAME可以包含文件名或带完整路径的文件名。 SUFFIX 是可选的,它包含用户想要删除的文件扩展名部分。 `basename` 命令有一些选项,如下所述。

选项

-a

它用于传递带有路径或不带有路径的多个文件名作为命令参数。

-s

它用于将扩展名作为需要删除的后缀传递。

-z

它用于通过用 null 分隔每个文件来显示多个文件名。

–help

用于显示使用`basename`命令的信息。

–version

用于显示版本信息。

示例 1:使用 NAME 和 SUFFIX

以下“basename”命令将检索带扩展名的文件名。该命令省略了 SUFFIX。这里,输出是‘product.txt’。

$ basename /home/fahmida/code/product.txt

如果您想检索不带扩展名的文件名,则必须使用“basename”命令提供文件扩展名作为后缀。这里,扩展名是“.txt”。运行以下命令从文件中删除扩展名。

$ basename /home/fahmida/code/product.txt .txt示例 2:使用“-a”选项和 NAME

此示例显示了“basename”命令的“-a”选项的使用。在这里,两个文件路径作为参数通过 `basename` 命令传递。每个带扩展名的文件名将从路径中检索并按换行符打印。

$ basename -a /home/fahmida/index.html /home/fahmida/code/emp.txt示例 3:使用“-z”选项和 NAME

“-z”选项与“basename”命令一起使用,以打印空值而不是换行符的多个文件名。以下命令同时使用两个选项:“-a”和“-z”。这里,两个文件名 index.html 和 emp.txt 将打印,没有任何空格或换行符。

$ basename -az /home/fahmida/index.html /home/fahmida/code/emp.txt示例 4:使用“-s”选项和 NAME

以下命令可以用作带有“basename”的 SUFFIX 的替代。文件扩展名需要通过“-sh”选项来从文件中删除文件扩展名。以下示例将从文件“addition.sh”中删除扩展名“-sh”。

$ basename -s .sh addition.sh示例 5:删除不带 SUFFIX 的文件扩展名

如果您不知道要从文件名中删除的文件的扩展名,那么这个示例将帮助您解决问题。使用以下代码创建一个名为 read_file.sh 的文件,以检索任何扩展名的文件名。本示例中使用“sed”命令从文件名中删除任何类型的扩展名。如果运行该脚本,删除扩展名“py”后,输出将为“平均”。

read_file.sh

#!/bin/bash # Set the filename with path filename="/home/fahmida/code/average.py" # Read the filename without extension by using ‘basname’ and `sed` command echo "$(basename "$filename" | sed 's/\(.*\)\..*/\1/')"

运行脚本。

$ bash read_file.sh示例 6:将文件扩展名从 txt 转换为 docx

没有扩展名的文件名需要将文件从一种扩展名转换为另一种扩展名。此示例显示如何通过在 bash 脚本中使用“basename”命令将所有文本文件 (.txt) 的扩展名更改为单词文件 (.docx)。使用以下代码创建一个名为 convert_file.sh 的文件。这里,使用 for-in 循环读取当前目录中所有扩展名为“.txt”的文本文件。不带扩展名的文件名由“basename”命令读取,并通过在循环的每次迭代中添加“.docx”扩展名来重命名。

convert_file.sh

#!/bin/bash # the loop will read each text file from the current directory for filename in `ls *.txt` do   # Print the text filename before conversion   echo "Filename before conversion : $filename"   # Change the extension of the file txt to docx   mv -- "$filename" "$(basename -- "$filename" .txt).docx" done

运行脚本。

$ bash convert_file.sh

使用“ls”命令检查文本文件是否已转换。

$ ls示例7:使用Shell参数扩展读取不带扩展名的文件名

Shell 参数扩展是在 bash 中读取不带扩展名的文件名的另一种方法。此示例显示 shell 参数扩展的用途。以下命令将文件路径名存储在变量 $filename 中。

$ filename="/var/usr/temp/myfile.tar.gz"

以下命令将从路径中删除所有类型的扩展名,并将不带扩展名的文件路径存储在变量 $file1 中。

$ file1="${filename%%.*}"

以下命令将仅打印路径中的文件名。此处,输出将为“myfile”。

$ echo "${file1##*/}"

如果文件名包含两个带有两个点(.)的扩展名,并且您想通过删除文件的最后一个扩展名来读取文件名,则必须使用以下命令。运行以下命令,通过删除文件的最后一个扩展名将文件路径存储到变量 $file2 中。

$ file2="${filename%.*}"

现在,运行以下命令来打印带有一个点 (.) 扩展名的文件名。这里,输出将是“myfile.tar”。

$ echo "${file2##*/}"结论

出于各种目的,需要不带扩展名的文件名。本教程通过一些示例(例如文件转换)解释了不带扩展名的文件名的一些用法。本教程将帮助有兴趣的用户学习如何将文件名和扩展名与文件路径分开。这里解释两种方法。用户可以按照这些方法中的任何一种仅从文件路径中提取文件名。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有