没有这样的文件或目录错误

没有这样的文件或目录错误

这是我正在编写的 shell 脚本:

#FOR YOUTUBE-DL COMMAND
read -r -p "Do you want to download a link? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
    read -e -p "Enter Youtube link: " youtube_link
    youtube-dl $youtube_link -o "/home/tex/catkin_ws/youtube_videos/%(title)s%(ext)s" -f mp4
fi

#FOR FFMPEG COMMAND 
read -e -p "Enter video file dir: " video_dir
video_dir="${video_dir/#\~/$HOME}"
echo $video_dir
read -e -p "Enter fps: " fps
read -e -p "Enter video file image destination: " image_destination
image_destination="${image_destination/#\~/$HOME}"
image_format="image-%04d.jpeg"
image_destination=$(echo ${image_destination}${image_format})   
ffmpeg -i $video_dir -r $fps $image_destination

这很简单 - 我只是想自动化一些命令,而不是一遍又一遍地写它们......

但我遇到了一些奇怪的错误。这是我的第一个 shell 脚本,所以我不确定我做错了什么。

当我到达最后一行时:

ffmpeg -i $video_dir -r $fps $image_destination

$video_dir我在 ffmpeg 命令中遇到问题。首先,当我:

echo $video_dir在第 13 行我得到:

/home/usr/ws/youtube_videos/AIRSOFT - 4 Player Split Screenmp4

然而,

ffmpeg 返回错误:

/home/usr/ws/youtube_videos/AIRSOFT: No such file or directory

就好像它只阅读第一部分(AIRSOFT)而不阅读其余部分(AIRSOFT - 4....)

是否有一个原因..?

答案1

Bash 不知道在文件名的其余部分中使用空格。您需要指定(转义)它们以便 Bash 使用整个文件名。

所以你可以

  1. 将“AIRSOFT - 4 Player Split Screen.mp4”更改为“AIRSOFT\ -\ 4\ Player Split\ Screen.mp4”
  2. 加上引号$video_dir。 (?)
  3. 将文件重命名为不带空格的名称,以便 bash 可以轻松解析它。

对于您的情况,第三个选项应该是最简单的。

相关内容