为什么这个 for 循环会删除文件路径的第一个或两个字符?

为什么这个 for 循环会删除文件路径的第一个或两个字符?

我正在尝试在目录树中找到所有 *.flac 文件,使用 ffmpeg 对它们进行编码,然后将它们输出到另一个位置的相应树中。我在 Windows 10 上使用 Cygwin。这是我目前所拥有的:

$ find /cygdrive/d/Users/Drew/Music/beets/Music -type f -name '*\.flac' > files
$ while read line; do ffmpeg -i "$line" -f null "$(echo $line | sed 's/\.flac/\.mp3/' | sed 's/Music\/beets/Desktop/')"; done < files

第一个命令生成了一个很好的文件列表(我可以说),但是 while 循环由于前导 '/' 被修剪而导致每个其他文件都出现 ffmpeg 错误:

cygdrive/d/Users/Drew/Music/beets/Music/$uicideboy$/Eternal Grey/06 Uglier.flac: No such file or directory

并且偶尔在修剪 2 个字符时似乎随机出现另一个错误:

Parse error, at least 3 arguments were expected, only 1 given in string 'ygdrive/d/Users/Drew/Music/beets/Music/$uicideboy$/Eternal Grey/08 Elysian Fields.flac'

这里是不是出现了一些我无法检测到的换行问题?还是其他问题?为什么会发生这种情况?

相关内容