converta um arquivo jpg depois de ser carregado usando inotifywait

2

Primeiro, é a primeira vez que escrevo um script, então peço desculpas se isso é trivial. Estou tentando configurar um relógio para que, sempre que um arquivo jpg for carregado em uma pasta específica, ele seja convertido em webp usando cwebp . depois de pesquisar na web, parecia que usar o inotifywait é a melhor maneira (por favor, deixe-me saber se isso não está correto). lendo o manual do script bash e a página inotifywait Eu consegui escrever este código:

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

isso funciona quando eu uso, por exemplo, o comando mv , mas quando uso o código acima, recebo este erro:

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'

se eu executar o comando cwebp test.jpg -o test.jpg.webp separadamente, ele será executado sem nenhum erro. O que estou fazendo de errado? isso dispara depois que o arquivo é criado, por que cwebp está recebendo 0 bytes?

    
por Behnood Khani 08.01.2016 / 16:33

1 resposta

2

O script inotifywait que você tinha estava usando -e create em vez de -e close_write ; a diferença é que o evento create será disparado antes que os dados tenham sido gravados no arquivo; assim, cwebp tinha "0 bytes de dados do arquivo".

Na página inotifywait que você referenciou:

  • create

A file or directory was created within a watched directory.

  • close_write

A watched file or a file within a watched directory was closed, after being opened in writeable mode. This does not necessarily imply the file was written to.

    
por 08.01.2016 / 20:39

Tags