Use inotifywait para mover o arquivo quando ele é carregado na pasta dropbox

7

Estou tentando encontrar uma maneira de mover imediatamente um arquivo para outra pasta assim que ele aparecer na minha caixa de depósito no CentOS.

Eu vasculhei a Internet em busca de pistas, mas não consigo ir além do fato de que preciso usar inotify para invocar um script que processará o arquivo da forma como ele aparece.

Meu conhecimento BASH é muito limitado e duvido que eu possa escrever isso em PHP.

Em outras palavras, como posso mover um arquivo para outra pasta assim que ele aparecer usando inotify ?

    
por Ortix92 10.08.2013 / 23:46

2 respostas

10

Esta é uma abordagem simples:

#!/usr/bin/env bash

dir=/home/ortix/Dropbox/new/
target=/home/ortix/movedfiles/

inotifywait -m "$dir" --format '%w%f' -e create |
    while read file; do
        mv "$file" "$target"
    done

Com mais detalhes sobre os tipos de arquivos que você deseja mover, você pode adicionar algumas verificações, registros, etc ...

    
por 11.08.2013 / 01:18
12

O comando inotifywait imprime uma mensagem toda vez que o conteúdo do diretório especificado é alterado. Você precisará escolher o evento certo: não quando o arquivo for criado, mas quando o Dropbox terminar de baixá-lo. Eu não sei exatamente como o Dropbox opera. Se ele gravar no arquivo em seu lugar final, ouça os eventos close_write . Se ele gravar no arquivo em um local temporário e, em seguida, movê-lo, escute moved_to events. Passe as opções -m -q a inotifywait para que ele continue ouvindo os eventos (por padrão, ele só aguarda o próximo evento) e só imprime mensagens relevantes.

cd ~/Dropbox/myfolder
inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
  cp -p "$file" /path/to/other/directory
done
    
por 11.08.2013 / 01:19