繁体   English   中英

帮助这个.sh代码

[英]Help with this .sh code

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

extcha xx yy * .xx

这是我制作的代码

#!/bin/sh

while [ *.$1 ] ; do

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

done;

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

这是你的意思:

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

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

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

# 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

你可以使用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

改成:

for i in  *.$1 ; do


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

done

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM