如何删除位置参数的扩展名?

时间:2016-04-18 17:02:23

标签: linux bash shell terminal

我想将存储在$ 2中的文件名压缩到指定目录,存储在$ 3中。例如,

if [-f $ 2];然后

gunzip $ 2

here I want to remove .gz from $2 

mv $ 2 $ 3

网络连接

所以从终端命令行运行脚本时我输入:

-z anotherdirectory/test.txt user/harry

因为错误说mv:不能统计'backup / test.txt.gz':没有这样的文件或目录。

谢谢大家!!

2 个答案:

答案 0 :(得分:1)

要删除单个扩展程序,请使用%后缀删除操作符:

mv "${2%.*}" "$3"

或者如果您只想删除.gz,可以使用:

mv "${2%.gz}" "$3"

但是你可以通过解压缩你希望它去的文件来完全避免复制:

gunzip -c "$2" > "$3"

-c选项告诉gunzip写入stdout。与普通gunzip不同,它不会删除gzip文件,因此您之后必须rm

值得注意的是gunzip了解其他扩展程序,例如tgz;它会将foo.tgz解压缩为foo.tar,而不是foo。因此,只删除扩展名的命令不适用于所有扩展名,而gunzip -c则会。

答案 1 :(得分:0)

 mv $(echo $2 |sed 's/\.gz$//') $3 

另外,您应该查看tutorial about sed