inotifywaitを使用してアップロードした後、jpgファイルを変換します。

inotifywaitを使用してアップロードした後、jpgファイルを変換します。

まず、bashスクリプトを書くのが初めてだと些細な場合はお詫び申し上げます。jpg特定のフォルダにファイルがアップロードされるたびにwebpcwebp不正確です)。 Bashスクリプトマニュアルを読むinotify待つページで次のコードを書きました。

inotifywait -m /home/ben -e create -e moved_to |
    while read path action file; do
        # echo "The file '$file' appeared in directory '$path' via '$action'"
        if [[ $file = *.jpg ]]
        then
             cwebp $file -o $file.webp
        fi
    done

mvこれはサンプルコマンドを使用すると機能しますが、上記のコードを使用すると次のエラーが発生します。

Could not read 0 bytes of data from file test.jpg
Error! Could not process file test.jpg
Error! Cannot read input picture file 'test.jpg'

単独でコマンドを実行すると、cwebp test.jpg -o test.jpg.webpエラーなしで実行されます。私は何が間違っていましたか?これはファイルが生成された後に発生します。なぜcwebpゼロバイトが表示されるのですか?

ベストアンサー1

使用中のスクリプト-e createはinotifywaitを使用しません-e close_write。違いは、データがファイルに書き込まれる前に生成イベントが発生することです。したがって、cwebp「ファイルに0バイトのデータがあります」。

~からinotify待つ参照したページ:

  • 作る

監視対象のディレクトリにファイルまたはディレクトリが作成されました。

  • 書き込みを閉じる

監視されたファイルまたは監視されたディレクトリのファイルが書き込み可能モードで開かれて閉じました。これは必ずしもファイルが作成されたことを意味するわけではありません。

おすすめ記事