Answers:
您很可能有问题,因为您没有引用文件名:
for f in */*.bmp ; do convert "$f" "${f%bmp}png" ; done
# ^ ^ ^ ^
这样做可以避免文件名中的空格引起问题。
*/*.bmp
。
我会像这样重构代码。我发现此方法更加清晰和易于调试:
find . -type f -name '*.bmp' |\
while read BMP
do
DIR=$(dirname "$BMP")
PNG="$(echo $BMP | sed 's/.bmp//g')"
convert "${BMP}" "${PNG}".png
done
find | while read
,尤其是当一个glob就足够了。
's/\.bmp$/.png/'
,然后从实际命令中删除.png
$f
也应引用