在bash中提取位置文件名和扩展名

时间:2017-10-11 11:24:48

标签: linux bash

我想创建一个脚本,通过删除midle扩展名来重命名具有2个​​扩展名的文件。参考这个,我找到了这个很棒的主题: Extract filename and extension in Bash

有人发布了关于shell参数扩展的内容:

~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz

我的问题是上述陈述:你如何回应 example.gz

由于

2 个答案:

答案 0 :(得分:1)

你不能在一次手术中做到这一点;你需要使用临时变量。

$ ext=${FILE##*.} # ext=gz
$ tmp=${FILE%.*}  # Remove .gz
$ echo "${tmp%.*}.$ext"  # Remove .tar, then add .gz back

答案 1 :(得分:1)

你可以简单地在没有任何临时变量的情况下实现它,通过组合正确的语句,这些语句提供了你需要的两个部分,其中包含.

echo "${FILE%%.*}.${FILE##*.}"