问一个 shell 里的问题, 字符串消失了一个点?

2018-04-19 10:40:29 +08:00
 happywowwow

想把 .flac 转成 .wav

#!/usr/bin/env bash
set -e

find . -iname "*.flac" | while read f
do    
    target=${f//flac/wav}
    echo ${f}
    echo ${target}
done

echo "###############################"
 
find . -iname "*.flac" | while read f
do  
    target=${f//flac/wav}
    echo ${f}
    echo ${target}
    ffmpeg -y -i "${f}" "${target}"
done

输出:

./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.wav
./Rewrite The Stars - Zac Efron,Zendaya.flac
./Rewrite The Stars - Zac Efron,Zendaya.wav
###############################
./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.wav
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
  ......
  ......
/Rewrite The Stars - Zac Efron,Zendaya.flac
/Rewrite The Stars - Zac Efron,Zendaya.wav
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
  ......
  ......
/Rewrite The Stars - Zac Efron,Zendaya.flac: No such file or directory

可以看到, 第二个循环里, 处理第二首歌, 那个 . 消失了?...

如果我设置了 set -ex 可以看到是这样的

第一个循环
...省略
+ read f
+ target='./Rewrite The Stars - Zac Efron,Zendaya.wav'
+ echo ./Rewrite The Stars - Zac Efron,Zendaya.flac
./Rewrite The Stars - Zac Efron,Zendaya.flac
+ echo ./Rewrite The Stars - Zac Efron,Zendaya.wav
./Rewrite The Stars - Zac Efron,Zendaya.wav
...省略
第二个循环里
...省略
+ read f
+ target='/Rewrite The Stars - Zac Efron,Zendaya.wav'
+ echo /Rewrite The Stars - Zac Efron,Zendaya.flac
/Rewrite The Stars - Zac Efron,Zendaya.flac
+ echo /Rewrite The Stars - Zac Efron,Zendaya.wav
/Rewrite The Stars - Zac Efron,Zendaya.wav
+ ffmpeg -y -i '/Rewrite The Stars - Zac Efron,Zendaya.flac' '/Rewrite The Stars - Zac Efron,Zendaya.wav'
...省略

都是一样的循环啊...

两首歌名

Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
Rewrite The Stars - Zac Efron,Zendaya.flac
1373 次点击
所在节点    问与答
5 条回复
goofool
2018-04-19 10:55:01 +08:00
什么点
jasonyang9
2018-04-19 11:02:07 +08:00
@goofool #1 路径最前面那个表示当前工作目录的点

我这边试了木有问题的,奇怪了
happywowwow
2018-04-19 11:02:49 +08:00
@goofool
@jasonyang9

./Rewrite The Stars - Zac Efron,Zendaya.flac 变成了
/Rewrite The Stars - Zac Efron,Zendaya.flac
happywowwow
2018-04-19 13:40:31 +08:00
@jasonyang9 也有尝试了, 浮现了. 可能得就是这两个歌名, 因为我之前处理的文件夹里有很多歌曲, 发现总是这里两首的时候过不去.
happywowwow
2018-04-19 14:23:13 +08:00
@goofool
@jasonyang9
搞定. 怀疑是 ffmpeg 用到了 stdin 吃了几个字符把.

```
#!/usr/bin/env bash
set -e

for f in *flac; do
target=${f//flac/wav}
echo ${f}
echo ${target}
ffmpeg -y -stats -i "${f}" "${target}"
done
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX