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.
Procurei na Internet algumas pistas, mas não posso ir além do fato de que preciso usar inotify
para chamar um script que processará o arquivo como ele aparece.
Meu conhecimento em BASH é muito limitado e duvido que possa escrever isso em PHP.
Em outras palavras, como posso mover um arquivo para outra pasta assim que aparecer usando inotify
?
Respostas:
Esta é uma abordagem simples:
Com mais detalhes sobre os tipos de arquivos que você deseja mover, você pode adicionar algumas verificações, registros, etc.
fonte
create
evento não está correta, pois você fará ummv
em um arquivo que pode não ser totalmente copiado no disco. Veja a resposta do @Gilles, usando oclose_write
evento.O comando
inotifywait
imprime uma mensagem sempre 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. Não sei exatamente como o Dropbox funciona. Se ele gravar no arquivo em seu lugar final, ouça osclose_write
eventos. Se ele gravar no arquivo em um local temporário e depois movê-lo para o lugar, ouça osmoved_to
eventos. Passe as opções-m -q
parainotifywait
que ele continue ouvindo eventos (por padrão, aguarda apenas o próximo evento) e imprima apenas mensagens relevantes.fonte
inotifywait
nomes de arquivos com terminação nula. O melhor que pude fazer foi usar um personagem menos provável que a nova linha, por exemplo%f$'\001'
, e usar-d $'\001'
comwhile IFS= read -r
ouxargs
.inotifywait
é irritante assim. Você pode usar algo como//%f
, pois o nome do arquivo nunca conterá uma barra dupla, contanto que o caminho a ser observado não; então o aborrecimento está do lado da análise.