2016-11-04 35 views
0

我是一個noob,並試圖爲Plex構建一個後期處理類型腳本。 在一些工作人員和谷歌的幫助下,我把以下腳本轉換成mkv文件爲mp4文件。我的linux bash腳本不會循環所有文件

該腳本將「查找」媒體目錄中的所有文件並將其轉換爲mp4文件。

它找到第一個,正確處理並退出 - 爲什麼? 我需要幫助讓這個腳本循環。 我有用這種方式編寫的quirky find命令,所以「find」命令將會用空格捕獲文件名,並且dirname命令將起作用。

腳本---

find -L "/media/4tbdisk/test/" -type f -name '*.mkv' -print0 | while IFS=  read -r -d $'\0' FILE; do 
echo "filename is ---" "$FILE"; 
DIR=$(dirname "${FILE}"); 
echo "directory is --" $DIR; 
transcode-video --mp4 --quick "$FILE" --output "$DIR"; 
done 

什麼情況是,該腳本會發現一個MKV文件,並對其進行處理,但不會繼續循環通過處理其餘部分。 如果它發現的第一個文件已被處理,「transcode」腳本將會顯示「輸出文件存在...」,並且會繼續下一個,但是在它創建第一個mp4文件後,它會停止運行

謝謝提前 haeffnkr

+0

在這裏工作。我懷疑簡化你的第一行會更好:'find -L「/ media/4tbdisk/test /」-type f -name'* .mkv'|同時讀取-r FILE;做' –

+0

作爲第一個測試,你可以嘗試單獨運行'find -L「/ media/4tbdisk/test /」-type f -name'* .mkv''(沒有'-print0')來查看有多少找到文件 – yolenoyer

+0

嘗試'transcode-video

回答

0

您似乎正在使用此transcode-video腳本。它基於HandbrakeCLI和mplayer,它們都傾向於過度消費stdin,從而在第一次迭代後讀取循環時斷開(ex1,ex2,ex3,ex4)。

您可以通過從/dev/null重定向輸入所以它不消耗任何環路的輸入的避免這種情況:

find -L "/media/4tbdisk/test/" -type f -name '*.mkv' -print0 | while IFS=  read -r -d $'\0' FILE; do 
echo "filename is ---" "$FILE"; 
DIR=$(dirname "${FILE}"); 
echo "directory is --" $DIR; 
transcode-video < /dev/null --mp4 --quick "$FILE" --output "$DIR"; 
done 
+0

「那個人」這是工作:) :) :) :) :) :) :) - 大笑 - 超級真棒......你搖滾,是的,這是我使用的腳本,是的,它是基於在HandBrake上。太感謝了 !!!!! – haeffnkr