You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

脚本执行mv命令提示‘mv: cannot stat [DIRECTORY/FILE]: no such file or directory’但手动操作正常的问题求助

解决 mv: cannot stat... 错误的方案

咱们直接揪出问题根源,一步步把你的脚本修好:

1. 最致命的路径错误

你脚本里的mv命令写了绝对路径 /DIR_trash/$2.zip,这会让系统去**根目录(/)**下找名为DIR_trash的文件夹,但你的回收站明明在主目录下的trash里啊!这就是反复报错的核心原因。

你已经定义了DIR_trash="trash",要么用变量拼接正确路径,要么直接用主目录的绝对路径~/trash(~代表当前用户的主目录),二选一都能解决路径问题。

2. 修复后的完整脚本(附带实用优化)

DIR_trash="trash"

# 定义恢复文件的函数
restore_from_trash() {
    if [ "$1" == "-u" ]; then
        # 更严谨的参数数量判断:必须有两个参数(-u + 文件名)
        if [ $# -ne 2 ]; then
            echo "错误:请在 '-u' 后指定要恢复的文件/目录名称。"
            return 1
        fi

        # 用绝对路径定位目标文件,避免依赖当前工作目录
        local target_zip="$HOME/$DIR_trash/$2.zip"
        # 这里替换成你实际的记录文件路径(原脚本里的$file7未定义,必须补全)
        local record_file="$HOME/$DIR_trash/deleted_files.log"

        if [ -f "$target_zip" ]; then
            echo "找到回收站中的 $2.zip,开始恢复..."
            # 直接用绝对路径操作,不用反复切换目录
            sed -i "/$2/d" "$record_file"
            mv -i "$target_zip" .
            unzip "$2.zip"
            rm "$2.zip"
            echo "恢复完成!"
        else
            echo "回收站中未找到 $2.zip。"
        fi
    fi
}

# 传递脚本参数给函数
restore_from_trash "$@"

3. 其他需要注意的细节

  • 给变量加引号:比如"$target_zip",能避免文件名带空格时出现奇怪的错误。
  • $file7必须定义:原脚本里的sed命令用到了$file7但没给它赋值,你得把它替换成实际的记录文件路径(比如回收站里记录已删除文件的日志),否则这行命令会报错。
  • 少用cd切换目录:频繁切换目录容易让路径逻辑混乱,直接用绝对路径操作文件更可靠。

验证修复效果

修改后,从主目录运行脚本恢复文件(比如恢复名为d1的文件):

./your_script.sh -u d1

这时候mv命令会正确指向~/trash/d1.zip,再也不会出现找不到文件的错误了。

内容的提问来源于stack exchange,提问作者Ninini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:44:10