2017-04-06 54 views
0

我有一個用bash編寫的腳本來轉換文件夾中的flac文件。但是,如果文件位於我要呼叫的文件夾的子目錄中,則不起作用。對所有級別的子目錄中的文件運行腳本

例如,如果我調用一個直接在其中包含flac文件的目錄,該腳本可以正常工作。如果文件夾名稱和flac文件之間存在文件夾,則無法運行。

  • AlbumName/*.flac < - 調用AlbumName

  • AlbumName/CD1/*.flac <時運行良好 - 調用AlbumName

這裏的時候不會運行的代碼我使用:

for file in "$1"/*.flac 
do 
    if [ -f "${file}" ]; then 

     # do flac conversion script 

    fi 
done 

有什麼想法?

find . -path "*.flac" -type f -exec ./flac_converter.sh "{}" \; 

此命令查找路徑.每個文件(-type f),在匹配*.flac

+0

flac轉換涉及非專業術語?似乎'find'可以更好地處理這項工作。這些行之間的東西:'找。 -name「* $ 1/* .flac」-type f -exec flac_conversion {} \;' – odradek

+0

它使用來自被調用文件夾的基本名稱的新文件夾,將文件夾名稱中的「FLAC」更改爲「V0」,然後它運行一個flac到mp3轉換器。 – jakeokeefe

回答

1

你可以得到所有.flac文件與find,然後與他們中的每一個執行後手轉換腳本作爲參數傳遞然後執行-exec flac_converter.sh,每個匹配{}

所以,例如,如果我有這樣的文件結構:

$ tree flacs 
flacs 
    ├── asd.flac 
    ├── dsa.flac 
    └── more 
     └── more_asd.flac 

運行命令將產生:

$ find . -path "*.flac" -type f -exec ./flac_converter.sh "{}" \; 
I'm converting ./flacs/asd.flac 
I'm converting ./flacs/dsa.flac 
I'm converting ./flacs/more/more_asd.flac 

flac_converter.sh僅呼應句子$1(從find該文件作爲輸入)。注意它順利運行./flacs/more/*.flac以及./flacs/*.flac

相關問題