Shell: Verifique se algum arquivo no diretório foi alterado

1

Estou usando inotify-tools para observar se algum arquivo dentro de um diretório foi modificado :

while inotifywait -e modify /etc/checking/; do
    curl...
done

No entanto, modify observa que um arquivo assistido ou um arquivo dentro de um diretório observado foi gravado em , independentemente de o conteúdo escrito ser o mesmo.

Antes de enviar um novo curl , gostaria de verificar se o conteúdo anterior dos arquivos assistidos realmente mudou.

Eu estava pensando em usar os comandos md5sum para aproveitar a vantagem.

  1. Então, eu preciso salvar uma saída md5sum para cada arquivo em uma matriz. Alguma idéia?
  2. Quando o evento modify é compactado, compare com o anterior md5sum s

Estou usando #!/usr/bin/env sh

Alguma idéia?

    
por Jordi 04.07.2018 / 10:47

2 respostas

0

Que tal usar um controle de versão, como git em um loop? Isso monitora todas as alterações e pode gerar dados passíveis de análise com git status --porcelain , onde você pode ver se é uma modificação de dados ou um novo arquivo e não mostra se o conteúdo não mudou realmente. Exemplo:

$ git init
$ echo "aa" > file1
$ git add file1
$ git commit -m "initial"
$ echo "bb" > file2
$ echo "aa" > file1
$ git status --porcelain

saídas:

?? file2

A desvantagem é que inotify está intimamente ligado ao sistema de arquivos real, enquanto o git é muito mais alto (e, portanto, tem sobrecarga).

    
por 04.07.2018 / 11:09
0

Você pode verificar todos os arquivos em um diretório específico ( /etc/checking ) recursivamente e gravar o código de soma de verificação em um arquivo. Então, quando você quiser procurar por modificações, simplesmente compare-as correndo pela lista.

find /etc/checking -type f -exec md5sum {} \; > checklist.chk

checklist.chk ficará assim:

bda7d4479b770eb055287d265b62c056  /etc/checklist/file001
83087902bc3bfea5cf8594c7d3f5c350  /etc/checklist/file002
7af7a423d53450e75fc228d6163ae9e6  /etc/checklist/file003

Em seguida, compare-o com a lista de verificação:

md5sum -c checklist.chk

e será exibido:

/etc/checklist/file001: OK
/etc/checklist/file002: OK
/etc/checklist/file003: OK

Você pode adicionar isso facilmente em um cronjob para executá-lo todos os dias, por exemplo.

Você também pode usar o mesmo comando para gerar uma nova lista de verificação a cada vez e executar um diff comando entre duas listas de verificação.

    
por 04.07.2018 / 15:11

Tags