gpt4 book ai didi

bash - 读取文件名中的空格时

转载 作者:行者123 更新时间:2023-12-04 22:51:26 25 4
gpt4 key购买 nike

在此.ogg文件

$ tree
.
├── Disc 1 - 01 - Procrastination.ogg
├── Disc 1 - 02 - À carreaux !.ogg
├── Disc 1 - 03 - Météo marine.ogg
└── mp3

我尝试使用 while循环到 ffmpeg 将它们转换为 mp3 在文件名中保留空格::
$ ls *.ogg | while read line; do ffmpeg -i "$line" mp3/"$line".mp3 ; done

但我得到这个错误::
$ 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' ...
...

本报告 bash ffmpeg find and spaces in filenames即使它看起来相似,也适用于更复杂的脚本并且没有答案。

这个 ffmpeg not working with filenames that have whitespace仅在输出为 http://URL 时修复它

最佳答案

使用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)

您也可以使用简单的 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

看:
  • Why you shouldn't parse the output of ls(1)
  • 关于bash - 读取文件名中的空格时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091001/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com