mv: 无法统计 [目录/文件]: 没有这样的文件或目录

时间:2021-06-19 12:29:12

标签: bash

编辑:DIR_trash="trash"

我写了一个函数将文件移动到当前目录。

if [ "$1" == "-u" ]
then
    if [ $# == 1 ]
    then
        echo "Something went wrong. Please make sure you're passing the name of the file/directory after '-u'."
    else
        if [ -f $DIR_trash/$2.zip ]
        then
            echo "$2.zip has been found in the trash."
            cd
            cd $DIR_trash
            sed -i "/$2/d" $file7
            mv -i /$DIR_trash/$2.zip .
            unzip $2.zip
            \rm $2.zip
            cd
        else
            echo "$2.zip has not been found in the trash."
        fi
    fi
fi

如您所见,有一行代码表示:

mv -i /DIR_trash/$2.zip .

所以基本上我试图将我在参数 2 中传递的文件从垃圾箱移动到当前目录。我总是从主目录运行这个脚本,它有垃圾目录。这是我运行时得到的:

Error file

每当我在 Konsole(从家庭目录中)手动编写它时,它确实有效:

rm -u trash/d1 .

我没有想法了。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

假设您运行脚本,当前目录为 /some/where,参数为 -ud1。我还将假设您的主目录是 /home/ninini。让我们看看您的脚本在哪里查找文件。

<块引用>
DIR_trash="trash"
        if [ -f $DIR_trash/$2.zip ]

您检查 /some/where/trash/d1.zip 是否存在。

<块引用>
            cd
            cd $DIR_trash

假设两个 cd 命令都成功,当前目录现在是 /home/ninini/trash

<块引用>
            mv -i /$DIR_trash/$2.zip .

您是说将 /trash/d1.zip 移动到当前目录,即 /home/ninini/trash

来源和目的地都没有意义。源 /$DIR_trash 没有意义:为什么要在根目录下寻找名为 trash 的目录?目标没有意义,因为您只是尝试更改到垃圾目录,而现在您正在尝试将文件从垃圾目录中移出......进入垃圾目录。

我不知道正确的代码是什么,因为您没有说明脚本的用途。您确实说要“将文件移动到当前目录”;那么你不能在脚本中途更改当前目录!假设 test 命令中的路径 $DIR_trash/$2.zip 是正确的,删除​​ cd 命令并写入

             mv -i -- "$DIR_trash/$2.zip" .

请注意,这会将文件从当前目录下名为 trash 的目录中移动。如果这不是您想要的,您需要更改 DIR_trash 的定义。它应该是一个绝对路径,也许

DIR_trash=~/trash

另请注意,您的脚本会在包含空格和其他特殊字符的文件上中断。始终在变量替换周围加上双引号:"$VAR",而不是 $VAR。 (例外:当你知道你需要一些双引号阻止的效果,并且你明白为什么将它们排除在外是安全的。)