Linux脚本;让Loop重命名;脚本新手

时间:2018-10-18 15:27:56

标签: linux scripting ksh

您将不得不原谅我,我几乎没有编写Linux脚本的经验。好的,我想做的是重命名具有指定名称的文件的一部分,但是我遇到的问题是在我的For循环过程中出现此错误,原因是此 0403-011指定的替换是对于此命令无效:我不确定我在for循环中做错了什么,有人可以帮忙吗?

    #Creates Directory
    echo "Name of New Directory"
    read newdir
    if [[ -n "$newdir" ]]
    then
      mkdir $newdir
    fi
    echo $userInput Directory Created
    echo 
    echo "Directory you wish to Copy?"
    read copydir
    if [[ -n "$copydir" ]]
    then
    #Copies contents of Specified Directory
     cp -R $copydir/!(*.UNC) $newdir;

    #Searches through directory  
    for file in $newdir/$copydir*; do
    mv -v -- "$file" "${file/old/new}";
    done


fi

2 个答案:

答案 0 :(得分:1)

您正在使用哪个版本的ksh?

"${file//old/new}""${file/old/new}"Doku built-in functions for int, map, sum中的有效语法。

如果您的环境是ksh93 "${file//old/new}",则不支持替换。

您必须使用sed / tr替换模式。这是sed的示例。

mv -v -- "$file" "$(echo ${file}|sed 's/old/new/')"

答案 1 :(得分:0)

违规行:

mv -v -- "$file" "${file/old/new}";

应为:

mv -v -- "$file" "${file//old/new}";

如果要将$old替换为$new(而不是将文字字符串"old"替换为"new"),请输入:

mv -v -- "$file" "${file//$old/$new}";