脚本执行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
相关产品推荐
相关产品推荐

