在当前目录下有一些子目录,子目录下有一些wav文件,我的需求是把它们转为mp3
find命令实现查找所有wav文件$ find -type f -name "*.wav"<br>./EXdata/NOSE/hoiku_Tr01_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr02_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr03_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr04_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr05_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr06_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr07_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr08_NoSE.wav<br>./本編/hoiku_Tr00.wav<br>./本編/hoiku_Tr01.wav<br>./本編/hoiku_Tr02.wav<br>./本編/hoiku_Tr03.wav<br>./本編/hoiku_Tr04.wav<br>./本編/hoiku_Tr05.wav<br>./本編/hoiku_Tr06.wav<br>./本編/hoiku_Tr07.wav<br>./本編/hoiku_Tr08.wav
遍历它们就可以做想做的操作了,像这样$ find -type f -name "*.wav"|while read filename<br>> do<br>> echo "$filename"<br>> done<br>./EXdata/NOSE/hoiku_Tr01_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr02_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr03_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr04_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr05_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr06_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr07_NoSE.wav<br>./EXdata/NOSE/hoiku_Tr08_NoSE.wav<br>./本編/hoiku_Tr00.wav<br>./本編/hoiku_Tr01.wav<br>./本編/hoiku_Tr02.wav<br>./本編/hoiku_Tr03.wav<br>./本編/hoiku_Tr04.wav<br>./本編/hoiku_Tr05.wav<br>./本編/hoiku_Tr06.wav<br>./本編/hoiku_Tr07.wav<br>./本編/hoiku_Tr08.wav
文件名不需要改变,只要后缀改为mp3即可,使用变量的字符串截取实现,也就是对$filename变量操作,像这样
${filename:2:-4}截取第2位到-4位,也就是去掉前面的./和后面的.wav
$ find -type f -name "*.wav"|while read filename; do echo "${filename:2:-4}"; done<br>EXdata/NOSE/hoiku_Tr01_NoSE<br>EXdata/NOSE/hoiku_Tr02_NoSE<br>EXdata/NOSE/hoiku_Tr03_NoSE<br>EXdata/NOSE/hoiku_Tr04_NoSE<br>EXdata/NOSE/hoiku_Tr05_NoSE<br>EXdata/NOSE/hoiku_Tr06_NoSE<br>EXdata/NOSE/hoiku_Tr07_NoSE<br>EXdata/NOSE/hoiku_Tr08_NoSE<br>本編/hoiku_Tr00<br>本編/hoiku_Tr01<br>本編/hoiku_Tr02<br>本編/hoiku_Tr03<br>本編/hoiku_Tr04<br>本編/hoiku_Tr05<br>本編/hoiku_Tr06<br>本編/hoiku_Tr07<br>本編/hoiku_Tr08
加上.mp3后缀就是这样
$ find -type f -name "*.wav"|while read filename; do echo "${filename:2:-4}.mp3"; do<br>ne<br>EXdata/NOSE/hoiku_Tr01_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr02_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr03_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr04_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr05_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr06_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr07_NoSE.mp3<br>EXdata/NOSE/hoiku_Tr08_NoSE.mp3<br>本編/hoiku_Tr00.mp3<br>本編/hoiku_Tr01.mp3<br>本編/hoiku_Tr02.mp3<br>本編/hoiku_Tr03.mp3<br>本編/hoiku_Tr04.mp3<br>本編/hoiku_Tr05.mp3<br>本編/hoiku_Tr06.mp3<br>本編/hoiku_Tr07.mp3<br>本編/hoiku_Tr08.mp3
组合一下ffmpeg的命令,ffmpeg的命令是这样的ffmpeg -i filename.wav filename.mp3,和上面的遍历操作,截取文件名操作组合起来,像这样
这里保留了echo,去掉它就是直接执行ffmpeg命令了,对于截取文件名还不确定的时候都建议echo看一下命令有没有问题
$ find -type f -name "*.wav"|while read filename; do echo ffmpeg -i "${filename:2}"<br>"${filename:2:-4}.mp3"; done<br>ffmpeg -i EXdata/NOSE/hoiku_Tr01_NoSE.wav EXdata/NOSE/hoiku_Tr01_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr02_NoSE.wav EXdata/NOSE/hoiku_Tr02_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr03_NoSE.wav EXdata/NOSE/hoiku_Tr03_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr04_NoSE.wav EXdata/NOSE/hoiku_Tr04_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr05_NoSE.wav EXdata/NOSE/hoiku_Tr05_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr06_NoSE.wav EXdata/NOSE/hoiku_Tr06_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr07_NoSE.wav EXdata/NOSE/hoiku_Tr07_NoSE.mp3<br>ffmpeg -i EXdata/NOSE/hoiku_Tr08_NoSE.wav EXdata/NOSE/hoiku_Tr08_NoSE.mp3<br>ffmpeg -i 本編/hoiku_Tr00.wav 本編/hoiku_Tr00.mp3<br>ffmpeg -i 本編/hoiku_Tr01.wav 本編/hoiku_Tr01.mp3<br>ffmpeg -i 本編/hoiku_Tr02.wav 本編/hoiku_Tr02.mp3<br>ffmpeg -i 本編/hoiku_Tr03.wav 本編/hoiku_Tr03.mp3<br>ffmpeg -i 本編/hoiku_Tr04.wav 本編/hoiku_Tr04.mp3<br>ffmpeg -i 本編/hoiku_Tr05.wav 本編/hoiku_Tr05.mp3<br>ffmpeg -i 本編/hoiku_Tr06.wav 本編/hoiku_Tr06.mp3<br>ffmpeg -i 本編/hoiku_Tr07.wav 本編/hoiku_Tr07.mp3<br>ffmpeg -i 本編/hoiku_Tr08.wav 本編/hoiku_Tr08.mp3
像下面这样就是直接执行了
$ find -type f -name "*.wav"|while read filename; do ffmpeg -i "${filename:2}"<br>"${filename:2:-4}.mp3"; done