Linux Utility para funcionalidade de “Timestamping”

2
A funcionalidade timestamping do

wget garante que ele faça o download apenas de arquivos que foram alterados. Eu estou procurando uma ferramenta de linha de comando linux que compare recursivamente um conteúdo de diretórios com uma versão salva (desde a última vez que ele executou), e execute um comando shell arbitrário em qualquer arquivo novo ou atualizado. Basicamente:

run-on-updated --directory /path/to/my/dir --last-results ~/.lastrun --exec "echo {}"

Eu poderia até imaginar isso como uma extensão do comando 'find'. Existe tal ferramenta?

    
por Nicholas White 02.03.2013 / 23:53

2 respostas

3

Uma tentativa de responder à pergunta - provavelmente com muito espaço para melhorias:

tar -cv -f /dev/null -g ~/.lastrun /path/to/my/dir | grep -ve '/$' | xargs -I{} echo '{}'

Nota para o comando tar: "A opção '-g' instrui o tar para operar em um arquivo incremental com metadados adicionais armazenados em um arquivo independente, chamado de arquivo de instantâneo. O propósito desse arquivo é ajudar a determinar quais arquivos foi alterado, adicionado ou excluído desde o último backup, para que o próximo backup incremental contenha apenas arquivos modificados. " (Citação do documento)

O comando grep exclui os nomes dos diretórios (que terminam com /), o qual o tar sempre gera e, finalmente, xargs executará o comando desejado nos arquivos.

    
por 03.03.2013 / 00:58
1

Não tenho certeza do que você quer dizer com a frase "comparar um conteúdo de diretórios com uma versão salva", mas para fazer o que a resposta do mpy faz, eu prefiro find :

Antes de executar o comando find pela primeira vez, você precisa executar o comando touch para criar o arquivo de registro de data e hora:

touch .lastrun

Mais tarde, execute o comando touch após a execução da pesquisa:

find my/dir -type f -newer .lastrun -exec echo '{}' \;
touch .lastrun

O arquivo .lastrun nunca será listado, porque nunca é mais novo que ele mesmo.

    
por 26.08.2016 / 21:22