我有以下脚本
#!/bin/bash
for dir in /home/marius/data/LibriSpeech/train-clean-100/*/*
do
for file in "$dir"/*
do
if [[ -f $file ]]
then
$name=$(echo $filename | cut -f 1 -d '.')
ffmpeg -i $file $name.wav
rm $file
fi
done
done
基本上我想深入到 train-clean-100 文件夹中的 2 个子目录,并将所有 .flac 文件更改为 .wav,然后删除 .flac 文件。
不知怎的,这不起作用。
答案1
正如 Ridgy 所说,我建议使用 find 来获取要转换的文件:
#!/bin/bash
folder=/home/marius/data/LibriSpeech/train-clean-100
for file in $(find "$folder" -type f -iname "*.flac")
do
name=$(basename "$file" .flac)
dir=$(dirname "$file")
echo ffmpeg -i "$file" "$dir"/"$name".wav
#ffmpeg -i $file $dir/$name.wav
#rm $file
done
在扩展变量时也可以使用引号来解决可能出现的空格问题,并且对于此类脚本,请在执行之前使用 echo 检查它是否执行了您想要的操作。