用文件名中的空格读取

use*_*834 1 bash ffmpeg while-loop

在这个.ogg文件上

$ tree
.
??? Disc 1 - 01 - Procrastination.ogg
??? Disc 1 - 02 - À carreaux !.ogg
??? Disc 1 - 03 - Météo marine.ogg
??? mp3
Run Code Online (Sandbox Code Playgroud)

我尝试使用while循环将ffmpeg转换为mp3保存文件名中的空格::

$ ls *.ogg | while read line; do ffmpeg -i "$line" mp3/"$line".mp3 ; done
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误::

$ ls *.ogg | while read line; do ffmpeg -i "$line" mp3/"$line".mp3 ; done
...
Parse error, at least 3 arguments were expected, only 0 given
in string ' 1 - 02 - À carreaux !.ogg' ...
...
Run Code Online (Sandbox Code Playgroud)

这个报告bash ffmpeg查找和文件名中的空格,即使它看起来相似,也是一个更复杂的脚本,没有答案.

当输出为http:// URL时,ffmpeg不使用具有空格的文件名仅修复它

cod*_*ter 6

find -print0得到的,而不是分析文件的NUL分隔的列表,ls输出这是不是一个好主意:

#!/bin/bash

while read -d '' -r file; do
  ffmpeg -i "$file" mp3/"$file".mp3 </dev/null
done < <(find . -type f -name '*.ogg' -print0)
Run Code Online (Sandbox Code Playgroud)

您也可以使用简单的glob来执行此操作:

shopt -s nullglob # make glob expand to nothing in case there are no matching files
for file in *.ogg; do
  ffmpeg -i "$file" mp3/"$file".mp3
done
Run Code Online (Sandbox Code Playgroud)

看到: