帮助这个.sh代码

时间:2011-03-22 20:52:42

标签: bash shell

我正在尝试创建一个shell脚本,当您在终端中输入类似内容时,它将更改文件扩展名:

extcha xx yy * .xx

这是我制作的代码

#!/bin/sh

while [ *.$1 ] ; do

    export name=`basename $i .$1`
    echo mv $name.$1 $name.$2

done;

这似乎不起作用。有人能告诉我哪里出错了吗?

3 个答案:

答案 0 :(得分:2)

您的意思是:

for name in *.$1; do
    stripped_name="$(basename "$name" ".$1")"
    mv "$name.$1" "$name.$2"
done

你的最大缺陷是while循环只是评估那个条件,有效地测试是否存在具有该形式名称的文件。它不会在任何变量中存储任何内容 - 当然不会像$i那样随意。你也不需要在这里输出任何东西。这只是让你不需要的子进程可见。

当然,您可以真正使用重命名实用程序。基本的(redhat和朋友):

# Note that this will actually rename abc.foo.foo to abc.bar.foo
# since it replaces the first match.
rename .foo .bar *.foo

和花哨的perl one(debian / ubuntu):

rename 's/.foo$/bar/' *.foo

答案 1 :(得分:0)

您可以使用rename实用程序......它可以执行此操作。

编辑:剧本。

#!/bin/bash

from="$1"
shift
to="$1"
shift

IFS="
"
for f in $@
do
  basefile="`basename "$f" ".$from"`"
  if [ ! "$basefile" = "$f" ]
  then
    echo mv "$basefile.$from" "$basefile.$to"
  fi
done

答案 2 :(得分:0)

更改为:

for i in  *.$1 ; do


    name=`basename $i .$1`
    mv $name.$1 $name.$2

done

不要忘记添加一些错误检查(例如,有两个参数)