다음 스크립트가 있습니다
#!/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를 사용하여 원하는 대로 작동하는지 확인할 수 있습니다.