bash shell中如何获取文件名和扩展名

时间:2019-11-20 08:53:00  来源:igfitidea点击:

在linux bash shell脚本中如何提取文件的文件名和扩展名?

Bash获取文件名或目录名的基本名

要在Bash中提取文件名和扩展名,请使用以下任一方法:

  • basename /path/to/file.tar.gz .gz删除文件名中的目录和扩展名,结果为file.tar
  • ${VAR%pattern}删除文件的扩展名
  • ${VAR#pattern}删除最短前缀

让我们在bash中查看一些示例以获取文件名的基本名称。

在bash shell脚本中获取文件的名称和扩展名

[ritter@theitroad ~]$ FILE="/home/Hyman/nginx.tar.gz"
[ritter@theitroad ~]$ basename "$FILE"
nginx.tar.gz
[ritter@theitroad ~]$ f="$(basename -- $FILE)"
[ritter@theitroad ~]$ echo "$f"
nginx.tar.gz

使用模式获取文件名

[ritter@theitroad ~]$ FILE="/home/Hyman/nginx.tar.gz"
[ritter@theitroad ~]$ echo ${FILE##*/}
nginx.tar.gz
[ritter@theitroad ~]$ 
[ritter@theitroad ~]$ url="https://www.theitroad.org/files/nginx.tar.gz"
[ritter@theitroad ~]$ echo "${url##*/}"
nginx.tar.gz

使用bash参数获取运行的脚本名称

$0的值是当前正在运行的脚本的完整路径。
我们可以从中提取文件名。

test.sh

#!/bin/bash
_self="${0##*/}"
echo "
/tmp/test.sh 10 200
" echo "$_self is called"

运行

/tmp/test.sh
test.sh is called

输出示例:

FILE="/home/Hyman/nginx.tar.gz"
echo "${FILE#*.}"     # tar.gz
echo "${FILE##*.}"    # gz
ext="${FILE#*.}"      # 将结果保存到变量中
echo "$FILE has $ext" # 打印变量的值

在bash shell脚本获取文件的扩展名

请尝试以下示例:

file="/etc/udisks2/udisks2.conf"
basename $file 
echo ${file##*/}

在bash shell脚本中,如何从完整文件名路径获取文件基本名

可以使用下面的方法:

file="/etc/udisks2/udisks2.conf"
basename $file .conf
## 或者
t="${file%.conf}"
echo "$t"

如果我们知道了后缀名,那么也可以这样获取文件名。

##代码##