1

フォルダーを見て、ハンドブレーキを使用してそのフォルダーに入るファイルを自動的にエンコードするスクリプトを作成しようとしています。これを行うには、inotifyを使用してフォルダーを監視し、フォルダーへの新しい追加をリストに入れ、cronジョブを使用してそれらを一晩エンコードします。ただし、while ループを使用してリストをループする場合、ハンドブレーキは存在する最初のファイルのみをエンコードし、スクリプトはリスト内のすべてのファイルを実行せずにループの後に続行します。ハンドブレーキを呼び出すスクリプトは次のとおりです。

#!/bin/bash

while IFS= read -r line
do
    echo "$(basename "$line")"
    HandBrakeCLI -Z "Very Fast 1080p30" -i "$line" -o "$line.m4v"
    rm "$line"
done < list.txt

> list.txt

HandBrakeCLI の代わりに単純なエコーを使用してループをテストすると、問題なく動作し、すべてのファイルが出力されるため、何が問題なのかわかりません。

問題が発生した場合にフォルダーを監視しているスクリプトは次のとおりです。

#!/bin/bash

if ! [ -f list.txt ]
then
    touch list.txt
fi

inotifywait -m -e create --format "%w%f" tv-shows | while read FILE
do
    echo "$FILE" >> list.txt
done

どんな助けでも素晴らしいでしょう、ありがとう

編集: より具体的に言うと、スクリプトは list.txt の最初のファイルに対して正常に動作し、問題なくエンコードされ、古いバージョンが削除されますが、リスト内の他のファイルは実行されません。

4

1 に答える 1

0

ここから撮影

簡単に問題を解決するには

echo "" | HandBrakeCLI ......

また

HandBrakeCLI ...... < /dev/null
于 2020-04-11T15:48:54.693 に答える