我正在尝试创建一个shell脚本,当您在终端中输入类似内容时,它将更改文件扩展名:
extcha xx yy * .xx
这是我制作的代码
#!/bin/sh
while [ *.$1 ] ; do
export name=`basename $i .$1`
echo mv $name.$1 $name.$2
done;
这似乎不起作用。有人能告诉我哪里出错了吗?
答案 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
不要忘记添加一些错误检查(例如,有两个参数)