0

イライラする時間を過ごしています。ファイルを 1 行ずつ読み取り、その行に基づいて操作を行うスクリプトを作成しました。具体的には、handbrake CLI を使用して、部分的なディレクトリ (ファイル リストに基づく) を別の小さな形式に変換しています。コマンドラインで「echo」を使用してスクリプトをテストし、ドライランを実行しましたが、実際にスクリプトを実行したい場合、リストの最初の項目でのみコマンドを実行し、終了します。コードは次のとおりです。

#!/bin/bash

if [ "$1" != "" ]; then
        SRC="$1"
else
        echo "No File List Specified"
        exit
fi
if [ "$2" != "" ]; then
        DEST="$2"
else
        echo "No Destination Path Specified"
        exit
fi

DEST_EXT=mp4
HANDBRAKE_CLI=HandBrakeCLI
profile="Very Fast 720p"

while read -r FILE
do
     echo "Next file is $FILE"
     if [ -f "$FILE" ]; then
        filename=$(basename "$FILE")
        extension=${filename##*.}
        newfilename=${filename%.*}
        newfullname="$newfilename.$DEST_EXT"
        if [ ! -f "$newfilename.$DEST_EXT" ]; then
                HandBrakeCLI -v --preset-import-gui "/home/master/Very Fast 720p.json" -Z "Very Fast 720p" -i "$FILE" -o "$DEST"/"$newfullname"
        fi
     fi
     echo "Moving to Next File"
done < "$SRC"

ファイルリストは次のとおりです。

/mnt/raid/public/Movies/The Lost World - Jurassic Park 2.mkv
/mnt/raid/public/Movies/Jurassic Park.mkv
/mnt/raid/public/Movies/Frozen 2 (2019) - 1080p.mkv
/mnt/raid/public/Movies/ALITA - BATTLE ANGEL (2019) - 1080p.mkv
/mnt/raid/public/Movies/How To Train Your Dragon 3 - 1080p.mkv
/mnt/raid/public/Movies/Star Wars Ep VI - Return of the Jedi (1983) - 4K83.mkv
/mnt/raid/public/Movies/Star Wars (1977) - 4K77.mkv
/mnt/raid/public/Movies/Star Wars (1977) - Despecialized.mkv
/mnt/raid/public/Movies/Star Wars Ep VI - Return of the Jedi (1983) - Despecialized.mkv
/mnt/raid/public/Movies/The Empire Strikes Back (1980) - Despecialized.mkv
/mnt/raid/public/Movies/Scary Stories to Tell in the Dark.mkv
/mnt/raid/public/Movies/National Lampoon's Christmas Vacation 1989.mkv
/mnt/raid/public/Movies/How To Train Your Dragon 3.mkv
/mnt/raid/public/Movies/Logan.mkv
/mnt/raid/public/Movies/BRAM STOKER'S DRACULA.mkv
/mnt/raid/public/Movies/The Crow.mkv
/mnt/raid/public/Movies/Jurassic World - Fallen Kingdom.mkv
/mnt/raid/public/Movies/TOP GUN.mkv
/mnt/raid/public/Movies/PREDATOR.mkv
/mnt/raid/public/Movies/LOGANS RUN.mkv
/mnt/raid/public/Movies/V for Vendetta.mkv
/mnt/raid/public/Movies/Happiness is a Warm Blanket Charlie Brown.mkv
/mnt/raid/public/Movies/The Neverending Story.mkv

コマンドの前に「echo」を付けたときの出力は次のとおりです。

Next file is /mnt/raid/public/Movies/Jurassic Park 3.mkv
HandBrakeCLI -v --preset-import-gui /home/master/Very Fast 720p.json -Z Very Fast 720p -i /mnt/raid/public/Movies/Jurassic Park 3.mkv -o /mnt/raid/public/Movies/CarVideo/Jurassic Park 3.mp4
Moving to Next File
Next file is /mnt/raid/public/Movies/The Lost World - Jurassic Park 2.mkv
HandBrakeCLI -v --preset-import-gui /home/master/Very Fast 720p.json -Z Very Fast 720p -i /mnt/raid/public/Movies/The Lost World - Jurassic Park 2.mkv -o /mnt/raid/public/Movies/CarVideo/The Lost World - Jurassic Park 2.mp4
Moving to Next File
Next file is /mnt/raid/public/Movies/Jurassic Park.mkv
etc

しかし、エコーと必要な引用符を削除すると、ハンドブレーキは最初のファイルでのみ実行され、スクリプト全体が終了します。ドライランは do ループを移動するときに正しいコマンドを順番に吐き出しているため、これがどのように発生するのかわかりません。Handbrake CLIコマンドの後に待機を入れようとしましたが、スクリプトを中断したとき(エンコード中にctl-c)に役立つように見えましたが、エンコードをそのままにしておくと、同じ動作(スクリプトの終了)になりました。

誰にもアイデアはありますか?

4

2 に答える 2