Bash
如何遍歷所有目錄和子目錄並查找具有特定副檔名的文件,然後在它們上執行 FFMPEG,然後將它們複製到新的庫中
我一直在研究今天和昨天的所有內容,試圖找到一個解決方案,到目前為止沒有一個對我有用。
例如:https ://stackoverflow.com/questions/5784661/how-do-you-convert-an-entire-directory-with-ffmpeg
我希望能夠遍歷文件夾中的所有文件(例如
/Music/
),在以 結尾的任何目錄或子目錄中查找任何文件.flac
,然後使用以下命令將這些 flac 文件轉換為 alac 文件:
ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"
$i 變數是 for 循環中文件的“名稱”。
${i%.*}
應該只返回名稱,而不是 .flac 部分。無論如何,在該命令執行後,我希望所有保存的 .m4a alac 文件然後被發送到“新庫”…… IE:我將有兩個
/Music/
庫。一個有所有的flac文件
一個擁有所有 alac (m4a) 文件
這可能嗎?
這是我到目前為止的命令,絕對不起作用,即使它起作用,它也不會像我想要的那樣創建一個新庫:
for i in *.flac; do ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"; done
目前該命令只是拋出錯誤
*.flac: No such file or directory
,我認為這是因為它沒有搜尋子目錄?…
#!/bin/bash shopt -s globstar src_dir="Music" dest_dir="Music_new" for orig_path in "${src_dir}"/**/*.flac; do #Change first directory in the path new_path=${orig_path/$src_dir/$dest_dir} #Remove filename from new path. Only directories are left. #They are needed for mkdir dir_hier=${new_path%/*} #Remove extension .flac from path, thus we have original path with first directory #changed and file extension removed. #Original path: "Music/one/two/song.flac" #New path: "Music_new/one/two/song" new_path=${new_path%.*} echo mkdir -p "$dir_hier" #New path with extension: "Music_new/one/two/song.m4a" #ffmpeg should create new file by this path, necessary directories #already created by mkdir echo ffmpeg -i "$orig_path" -c copy -acodec alac "${new_path}.m4a" done
echo
之前mkdir
和ffmpeg
檢查後應刪除。