【问题标题】:mv: cannot stat error [closed]mv:无法统计错误[关闭]
【发布时间】:2015-12-04 15:08:31
【问题描述】:

mv: cannot stat error : No such file or directory 错误

这是我的错误

这是我的代码

#!/bin/sh
printf "change word from read \n"
read a
read b
mv ${a} ${b}
printf "${b}\n"

我该如何解决?

【问题讨论】:

  • 您输入的第一个输入 (read a) 应该是现有文件的名称 - 似乎找不到。
  • 您为a 输入的字符串是否为现有文件命名?
  • 另外,如果b是一个路径而不是一个简单的名字,那么所有的目录必须已经存在; mv 不创建目录。

标签: linux bash mv


【解决方案1】:

您尝试 mv 的文件不存在。

你可以检查它是否存在:

if [ ! -f "$a" ]
then
  echo "File $a does not exist"
  exit
fi

【讨论】:

    【解决方案2】:

    我稍微重写了您的脚本,以检查文件是否存在以及是否会在需要时创建目录路径。您收到错误是因为文件不存在。 "mv" 不会创建目录,因此您在其中输入的任何内容都必须是存在的目录路径。


    所以,代替原来的版本:

    #!/bin/sh
    printf "change word from read \n"
    read a
    read b
    mv ${a} ${b}
    printf "${b}\n"
    

    我建议如下:

    #!/bin/bash
    printf "change word from read \n"
    read -r a
    read -r b
    
    if [[ ! -f ${a} ]] ; then
      echo "Unable to locate ${a}...Exiting"
      exit 2
    fi
    
    ### If you are renaming a file, remove "if" statement below ###
    if [[ ! -d ${b} ]] ; then
      echo "Directory does not exist...Creating ${b}"
      mkdir -p "${b}" 
    fi
    
    mv "${a}" "${b}"
    exit
    

    【讨论】:

    • 我想用mv重命名我的文件怎么办?
    • 如果他试图重命名他的文件,那么他可以删除第二个“if”语句......尽管他只能重命名文件并将其移动到已经创建的目录中。我将更新我的答案以包含关于删除第二个 if 语句的评论。
    • 我建议添加一个检查 a 和 b 不为空,并始终在变量上加上引号if [[ ! -f "${a}" ]]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2016-09-06
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多