在unix中更改文件扩展名

时间:2012-11-29 03:03:14

标签: unix file-extension

我正在接受Unix课程的介绍,并坚持完成最终作业。我需要编写一个脚本来更改运行脚本时输入的文件名的文件扩展名。运行脚本时也会输入新的文件扩展名。该脚本调用chExt1.sh。我们对脚本的第一次试用运行如下

./chExt1.sh cpp aardvark.CPP

该脚本假设将第二个输入文件扩展名更改为第一个输入中给出的文件扩展名。假设使用文件名给出了什么文件扩展名,或者给出了哪个文件扩展名作为新扩展名,也不仅仅是将大写更改为小写。如果给出以下内容,希望能够清楚地说明这一点:

./chExt1.sh istink helpme.plEaSe

该脚本会将helpme.plEaSe更改为helpme.istink。我在这个论坛和谷歌上搜索过,并且没有尝试过我发现的不同例子。以下是我尝试过的一些例子以及我目前拥有的一些例子。 电流

#!/bin/sh
fileExtension="$1"
shift
oldName="$2"
shift
newName=${oldName%%.*}${fileExtension}
echo $newName

回声只是看它是否有效,如果我开始工作,我将添加一个mv来保存它。 我尝试过的其他人:

newName=`${oldName%.*}`
newName=`${oldName#.*}`
sed 's/\.*//' $oldName > $newName

我似乎无法找到我使用过的其他一些sed,但是它们包含了很多反斜杠和()。*。我没有尝试basename命令,因为我不知道要输入的文件扩展名,我看到的所有示例都要求您指定要删除的内容而我不能。我没有列出我使用的所有不同的报价变体,但我尝试了很多。我的指示说要使用sed命令,因为我们应该知道如何在类中使用它,但是当我尝试这样做时,我不会仅仅隔离文件的结尾而且我相信(因为它需要很长时间才能完成)它我正在浏览整个文件并寻找。以及之后我继续做的任何事情。*作为模式。谢谢你能给予帮助。

1 个答案:

答案 0 :(得分:1)

shift改变了位置参数,因此在调用shift之后,第二个参数($ 2)现在是第一个($ 1)。第二次转换不是必需的,因为您已完成访问参数。您需要删除班次

#!/bin/sh
fileExtension="$1"
oldName="$2"
newName=${oldName%%.*}${fileExtension}
echo $newName

或将$ 2更改为$ 1。

#!/bin/sh
fileExtension="$1"
shift
oldName="$1"
newName=${oldName%%.*}${fileExtension}
echo $newName

但是,您仍然缺少新文件名中的点。这留给读者练习。