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

Bash脚本使用字符串变量作rm参数出现文件名拆分报错如何解决

Bash脚本youtube-dl下载后删除本地文件报错修复

原始代码

编写的Bash脚本实现接收URL输入后,调用youtube-dl下载对应文件,再调用gdrive将文件上传到Google Drive。
原始代码如下:

cd /root/downloaded
#take input
read -p 'URL:' url
echo
echo i will convert this file...
echo
#download and send output to temp txt file 
cd /root/
youtube-dl $url --force-ipv4 --exec echo > tempyou.txt 
file=$(tail -1 /root/tempyou.txt)
dir=""$file""
cd /root/go/bin
./gdrive upload "/root/$dir"
cd /root
echo
name="'$dir'"
path=$(pwd ~/$name)
directory="${path}/${name}"
rm $directory

报错现象

下载、上传功能运行正常,执行rm删除本地文件时,文件名被空格拆分为多个片段,报错如下:

rm: cannot remove "/root/'How": No such file or directory
rm: cannot remove 'It': No such file or directory
rm: cannot remove 'Feels': No such file or directory
rm: cannot remove 'To': No such file or directory
rm: cannot remove 'Code': No such file or directory
rm: cannot remove 'With': No such file or directory
rm: cannot remove "'Brainfuck'-T-qx-oC_lUo.mp4'": No such file or directory

修复方案

优化脚本结构,从根源避免文件名空格分词问题,具体优化点:

  • 新建专用临时目录/root/tempyt存放下载的文件,避免和其他目录下的文件混淆
  • 直接读取临时目录下最新创建的文件作为下载文件名,不再依赖临时文本文件存储youtube-dl的输出
  • 调用gdrive自带的--delete参数,上传完成后自动删除本地文件,无需手动拼接路径执行rm命令,彻底规避路径分词问题

修复后的代码如下:

#!/bin/bash -i
cd /root/tempyt
read -p 'URL:' url
echo
echo i will convert this file...
echo 
youtube-dl $url --force-ipv4
name=$(ls -Art | tail -n 1)
echo "$name"
path="'$name'"
cd /root/go/bin/
./gdrive upload "/root/tempyt/$name" --delete

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:01