Linux文件删除错误

时间:2012-11-21 21:19:14

标签: linux shell

每次运行此代码时,都会收到错误文件或目录不存在。为什么呢?

read -p "Enter the filename/path of the file you wish to delete : " filename
echo "Do you want to delete this file"
echo "Y/N"
read ans
case "$ans" in 
   Y) "`readlink -f $filename`" >>~/TAM/store & mv $filename ~/TAM/dustbin
        echo "File moved" ;;
   N) "File Not deleted" ;;
esac

当我准确输入文件名/目录并对其进行三重检查时,我仍然会收到此错误,但readlink部分仍可正常工作。

2 个答案:

答案 0 :(得分:2)

释义/总结/扩展my answer for a similar question

  • 我怀疑你真的打算在你的剧本中使用&而不是&&

  • "File Not deleted" not 是我使用的任何Linux系统上的有效命令。也许你错过了echo那里?

  • 您必须修复变量报价。如果filename变量包含空格,则shell将$filename扩展为多个参数。您需要将其括在双引号中:

    mv "$filename" ~/TAM/dustbin
    
  • 我没有看到您的脚本在任何地方创建~/TAM/目录...

答案 1 :(得分:1)

您错过了echo和一个&&

  1. 使用echo "`command`"来管道命令的结果字符串。或者,您可以直接使用command而不使用反引号和引号(不将结果存储在字符串中),在这种情况下,您不需要echo,因为该命令会将其结果传递给下一个命令。
  2. 单个&将在后台运行上述命令(async。)。要检查返回值并有条件执行,您需要&&||
  3. 这是一个完整的解决方案/示例(包括更多日志记录):

    # modified example not messing the $HOME dir.
    # should be save to run in a separate dir
    touch testfile                 #create file for testing
    read -p "Enter the filename/path of the file you wish to delete : " filename
    echo "Do you want to delete this file: $filename"
    echo "Y/N"
    read ans
    touch movedfiles               #create a file to store the moved files
    [ -d _trash ] || mkdir _trash  #create a dustbin if not already there
    case "$ans" in
        Y)  readlink -f "$filename" >> movedfiles && echo "File name stored" &&
            mv "$filename" _trash && echo "File moved" ;;
        N)  echo "File Not deleted" ;;
    esac
    cat movedfiles                 #display all moved files