Acho que você está pedindo por um cenário mais complexo. Você não descreveu como identificar o "último" arquivo a chegar, então este simplesmente expira após 5 segundos de inatividade do arquivo desde que pelo menos um arquivo foi transferido.
- Definir sinalizador = espera
- Em paralelo: sempre que um arquivo é notificado, defina flag = not_done
-
Aguarde até sinalizar == not_done
-
Iniciar ciclo
- Aguarde a conexão do USB e inicie o processo de sincronização (
rsync
) - Se algum novo arquivo for transferido, configure flag = not_done
- Caso contrário
- Se sinalizar == probably_done, defina sinalizador = definitivamente_conjunto. Caso contrário, configure sinalizador = probably_done
- Se levarmos menos de cinco segundos, espere o tempo restante
- Aguarde a conexão do USB e inicie o processo de sincronização (
- Fazer loop até sinalizar == definitivamente_done
Como precisamos de IPC entre o processo principal e o processo paralelo inotifywait
, considero implementar o sinalizador como um arquivo, possivelmente até mesmo um conjunto de nomes de arquivos.
Tanto quanto eu posso dizer não é fácil identificar se rsync
transferiu ou não novos arquivos . Pode ser necessário comparar o conteúdo do diretório de destino antes e depois.