Eu tenho um script que verifica um diretório usando mdls
* (para classificar por tempo adicionado) e executa algumas operações. No entanto, mdls
é um pouco lento, então gostaria de executá-lo apenas quando for absolutamente necessário (ou seja, quando o conteúdo do diretório for alterado).
Minha ideia é executar mdls
uma vez e armazenar em cache os resultados, executar alguma operação para acompanhar o estado do diretório. Nas execuções subsequentes, eu executaria a operação de verificação novamente e compararia o resultado com o que eu tinha. Se for diferente, execute novamente mdls
; caso contrário, use o cache.
Estou pensando em du '/dir/path' | tail -1
(se o tamanho do diretório permanecer igual ao byte, é provável que o conteúdo não tenha mudado) ou ls '/dir/path' | md5'
.
Atualmente, estou mais inclinado para a md5
solução, já que é resistente a renomeações de arquivos. No entanto, ambas as soluções são hackers e me pergunto se há algo mais eficiente (que ainda seja rápido).
Por fim, a solução será usada em um script ruby, se isso ajudar.
* Não estou postando isso para Ask Different porque mdls
não é o ponto. Pode ser qualquer outro comando lento.
Se for suficiente verificar se há arquivos novos/excluídos (e ignorar as modificações nos arquivos existentes ), você pode usar o carimbo
mtime
de data/hora do próprio diretório.Você pode obtê-lo com
stat
. A saída aqui está em segundos desde o início de 1970:Se você quiser verificar as modificações nos arquivos, poderá verificar todos os registros de data e hora e obter o maior com, por exemplo
sort
:(Isso é próximo ao BashFAQ 003 , que trata principalmente de encontrar o arquivo com o carimbo de data/hora mais novo/tamanho maior/etc., mas contém algumas soluções bastante elaboradas.)