![为什么这个 for 循环会删除文件路径的第一个或两个字符?](https://linux22.com/image/1583283/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%20for%20%E5%BE%AA%E7%8E%AF%E4%BC%9A%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%88%96%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我正在尝试在目录树中找到所有 *.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'
这里是不是出现了一些我无法检测到的换行问题?还是其他问题?为什么会发生这种情况?