ls -l 似乎给出了在目录中找到的文件名的一个串联

ls -l 似乎给出了在目录中找到的文件名的一个串联

我想编写一个 shellscript 将目录中的所有 .ogg 文件转换为 .mp3 文件。文件名包含空格,因此我在命令序列中使用了大量双引号。我使用的命令是

for FILE in "`ls -1 *.ogg`" ; do
    ROOTFILE=`printf "%s\n" "$FILE" | sed "s/ogg//" `
    ffmpeg -i "$FILE" "$ROOTFILE"mp3
done

但目录中的所有文件名现在都被 ffmpeg 视为一个字符串。如何分隔各个文件名,同时保留其中的空格?

答案1

总结所有评论(作者:埃里克·雷诺夫,钢铁起子, 和CAS),你的问题的解决方案是

for f in *.ogg; do
    ffmpeg -i "$f" "${f%.ogg}.mp3"
done

这可以避免您的尝试中出现的一些问题:

  • 解析ls的输出
  • 重新发明basename(其本身通常可以用 shell 字符串处理来代替,如上所述)。

相关内容