尝试在大型音乐收藏中进行从 M4A 到 OGG 的大规模转换,我有:
#!/bin/sh
for i in `find /home/family/Music -name *.m4a -print0`
#do ffmpeg -i "$i" -acodec libvorbis -aq 6 -vn -ac 2 "$i.ogg";
do echo $i
done
所有文件的名称中都会有空格,上面的输出显示一个文件,如下所示:
/home/family/Music/The
Kooks/Inside
In
_
Inside
Out/06
You
Don't
Love
Me.m4a
每个空格都标记一个新行,我想-print0
可以解决这个问题吗?
答案1
while
与以下语句一起使用循环read -d '' -r
:
find /home/family/Music -name '*.m4a' -print0 | while read -d '' -r file; do
echo "$file"
done
答案2
您可以将外部循环移至“内部”循环并避免分词问题,如下所示:
find /home/family/Music -name '*.m4a' -exec \
sh -c 'for i; do ffmpeg -i "$i" -acodec libvorbis -aq 6 -vn -ac 2 "$i.ogg"; done' sh {} +
请注意,-print0
不再需要此外,您需要引用*.m4a
以避免 shell 意外的全局扩展