นี่เป็นบน Ubuntu 12.04 ฉันพยายามหาวิธีรับ ffmpeg เพื่อทำการแปลงแบบ FLAC เป็น MP3 แบบเรียกซ้ำ ถ้าฉันcd
เป็นไดเรกทอรีและใช้
for f in *.flac; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 "${f/%flac/mp3}"; done
ที่ใช้งานได้ดีอย่างสมบูรณ์แบบ อย่างไรก็ตามเมื่อฉันลองสิ่งนี้มันไม่ทำงาน:
for f in "$(find . -type f -name *.flac)"; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 "${f/%flac/mp3}"; done
มันไม่ได้ทำให้เกิดข้อผิดพลาดที่เป็นประโยชน์ (แต่นี่คือผลลัพธ์ต่อไปไม่จำเป็นต้องบ่น):
evilsoup@enchantment:~/Music/Jean Sibelius$ for f in "$(find . -type f -name *.flac)"; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 "${f/%flac/mp3}"; done
ffmpeg version git-2012-12-18-b7e085a Copyright (c) 2000-2012 the FFmpeg developers
built on Dec 18 2012 19:23:11 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --enable-gpl --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
libavutil 52. 12.100 / 52. 12.100
libavcodec 54. 80.100 / 54. 80.100
libavformat 54. 49.102 / 54. 49.102
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 28.100 / 3. 28.100
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/02. Symphony No.1.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/03. Symphony No.1.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/stripped2.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/05. Symphony No.1.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/stripped3.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/09. Andante festivo.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/08. Symphony No.3.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/01. Finlandia.flac
./Symphonies 1, 2, 3 & 5 (Oslo Philharmonic Orchestra Conducted by Mariss Jansons) Disc 1/07. Symphony No.3.flac
./Symphonies 1, 2, 3 & 5
ผมเคยทดสอบfind
คำสั่งในตัวเองและทำงานได้ตามที่คาดไว้ดังนั้นปัญหาที่เกิดขึ้นจะต้องมีบางสิ่งบางอย่างจะทำอย่างไรกับการมีปฏิสัมพันธ์ระหว่างและfind
for
ฉันรู้ว่าฉันจะทำอะไรกับfind
's -exec
ตัวเลือก แต่ฉันไม่สามารถหาวิธีที่จะทำสตริงทดแทนเท่าที่จะทำได้ด้วยการทุบตีใด ๆfor
ห่วงและผมไม่ต้องการมีพวงของfile.flac.mp3
ที่จะจัดการกับแม้ rename
ถ้าพวกเขาสามารถได้รับการแก้ไขด้วยง่าย
for f in `find . -type f -name *.flac`; do
do
ไปecho $f; done
และดูว่าfor
ส่วนที่เป็นแม้จะผ่านข้อโต้แย้งไปยังร่างกายของลูป
$()
ทำให้การfor
แยกเหล่านั้นออกเป็นไฟล์แยกที่ช่องว่าง
IFS=$'\n';
ก่อนfind
ลูป