A maneira mais rápida de determinar se o conteúdo do diretório foi alterado desde a última vez

1

Eu tenho um script que verifica um diretório usando mdls * (para classificar pelo tempo adicionado) e eles executam algumas operações. No entanto, mdls é um pouco lento, por isso, gostaria de executá-lo somente quando for absolutamente necessário (ou seja, quando o conteúdo do diretório for alterado).

Minha idéia é executar mdls uma vez e armazenar em cache os resultados, executar alguma operação para acompanhar o estado do diretório. Em execuções subsequentes, eu executaria a operação de verificação novamente e compararia o resultado com o que eu tinha. Se diferente, execute novamente omdls; se não, 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 à solução md5 , pois é resistente a renomeações de arquivos. No entanto, essas duas soluções são hackyas e me pergunto se há algo mais eficiente (ainda é rápido).

Por fim, a solução será usada em um script ruby, se isso ajudar.

* Não estou postando isso em Pergunte diferente porque mdls não é o ponto. Pode ser qualquer outro comando lento.

    
por user137369 05.12.2017 / 17:40

1 resposta

1

Se for suficiente verificar arquivos novos / excluídos (e ignorar modificações em arquivos existentes ), você pode usar o timestamp mtime do próprio diretório.

Você pode obtê-lo com stat . A saída aqui está em segundos desde o início de 1970:

$ stat -f %m "$dir"      # stat on OS X
1512493220
$ stat -c %Y "$dir"      # GNU coreutils stat
1512493801
$ stat -c %.9Y "$dir"    # nanoseconds too
1512493801.802870731

Se você quiser verificar as modificações nos arquivos, verifique todos os timestamps e obtenha o maior com, por exemplo, sort :

$ stat -f %m "$dir"/* | sort -n | tail -1
1512428453

(Isto está perto de BashFAQ 003 , que é principalmente sobre encontrar o arquivo com o timestamp mais novo / maior tamanho / etc., mas contém algumas soluções bem elaboradas.)

    
por 05.12.2017 / 18:06