Para monitorar em "tempo real" qualquer arquivo acessado sob o diretório atual, abra um terminal e execute:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done
Ou, como se espalha em várias linhas:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
[ -f "$fname" ] && lsof "$fname"
done
Isso requer um sistema operacional, como o linux, que suporta inotifywait
.
O corpo do loop while
pode ser substituído por qualquer coisa que seja adequada ao seu propósito.
O significado das opções para inotifywait
são:
-
-r
Monitore recursivamente por meio de subdiretórios.
-
-m
Monitore continuamente.
-
-e access
Monitore eventos de ACESSO. Há muitos eventos possíveis que podem ser de interesse, mas isso parece ser o mais parecido com o que você pediu.
-
--format '%w%f'
Escreva o caminho e o arquivo de cada arquivo acessado para o padrão.
-
.
Monitore o diretório atual,
.
.
Limitação
O código acima não manipula nomes de arquivos que contenham caracteres de nova linha. Para lidar com isso, é necessário usar a opção -csv
do inotifywait junto com mais código que entende as sutilezas do formato CSV.