まず、bashスクリプトを書くのが初めてだと些細な場合はお詫び申し上げます。jpg
特定のフォルダにファイルがアップロードされるたびにwebp
。cwebp
不正確です)。 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待つ参照したページ:
- 作る
監視対象のディレクトリにファイルまたはディレクトリが作成されました。
- 書き込みを閉じる
監視されたファイルまたは監視されたディレクトリのファイルが書き込み可能モードで開かれて閉じました。これは必ずしもファイルが作成されたことを意味するわけではありません。