【问题标题】:Linux Script; For Loop to rename; New to ScriptingLinux 脚本; For Loop 重命名;脚本新手
【发布时间】:2019-03-23 11:16:15
【问题描述】:

请原谅我,我几乎没有编写 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

【问题讨论】:

  • 我无法重现此内容。我做了mkdir -p newdir copydir; touch copydir/{a.txt,b.txt,c.UNC,e.UNC}; newdir=newdir; copydir=copydir,但你如何期望for file in $newdir/$copydir* 工作?目录$newdir/$copydir 应该从哪里来/应该在$newdir/$copydir 路径中命名哪些文件?您是否打算使用完整路径进行复制?你能创建一个可重现的例子吗?前任。包括目录和文件的创建或发布你给程序的输入以及在运行脚本之前 newdir 和 copydir 的内容是什么??
  • 同意上面的 cmets,并且0403-011 ...err msg 形式的错误消息看起来像是来自 AIX OS。是这样吗?如果是这样,请编辑您的 Q 以显示来自echo $SHELL(可能还有echo $BASH_VERSION)的结果。您在顶部 #!/bin/sh (?) 列出的 shell 可能不支持 ${var/old/new} 语法。并且最好更新您的 Q 并添加诸如“查看 Q 中的更新”之类的评论,而不是创建一长串难以阅读的 cmets/代码。祝你好运。

标签: linux scripting ksh


【解决方案1】:

您使用的是哪个版本的 ksh?

"${file//old/new}""${file/old/new}"ksh93 中的有效语法。

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

你必须使用 sed/tr 来替换模式。这是一个使用 sed 的示例。

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

【讨论】:

  • 谢谢,它成功了,现在只是一个菜鸟问题,是否可以在 sed 中使用旧变量和新变量?我只是好奇。谢谢
  • 我明白了,但是谢谢,您的 Sed 命令确实帮助我解决了我的问题mv -- "$file" "$(echo ${file}|sed 's/'$copydir'/'$newdir'/')"
【解决方案2】:

违规行:

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

应该是:

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

如果您想用$new 替换$old(而不是用"new" 替换文字字符串"old"),请写:

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

【讨论】:

  • 运气不好还是一样的错误,这是我的for循环for file in $newdir/$copydir*; do mv -v -- "$file" "${file//old/new}"; done
  • @JoshAdams 那我就不知道了。对不起。
猜你喜欢
  • 1970-01-01
  • 2019-10-02
  • 2021-04-18
  • 2021-12-02
  • 2020-01-31
  • 2022-06-14
  • 2018-06-09
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多