O script perl
a seguir encontrará todos os arquivos que possuem o seu atime < = mtime (ou seja, arquivos que não foram lidos desde a última vez que foram gravados) e imprimem seus caminhos completos:
$ perl -MFile::Find=find -e 'find {
wanted => sub {my @s=stat; print "$_\n" if $s[8]<=$s[9]},
no_chdir => 1
}, @ARGV' files and dirs ...
Ou, usando recursos não suportáveis do GNU find:
$ find [files and dirs ...] -printf '%A@ %T@ %p\n' |
awk '$1 <= $2 { print substr($0, index($0, " ")+2) }'
A versão find
é mais precisa, porque também lida com diferenças de subsegundos entre o atime e o mtime. Ele não irá lidar com nomes de arquivos que contenham novas linhas - isso pode ser corrigido usando -printf '...
e GNU awk ( gawk
'RS="
) com bash
"bash
; mas então terá que ser decidido em um formato de saída onde as novas linhas embutidas serão claramente mostradas.
Você pode usar qualquer um deles em MS_NOATIME
; fazer isso em %code% puro é deixado como um exercício para o leitor; -)
Observação sobre carimbos de data e hora do arquivo:
Tudo isso pressupõe que o atime está realmente funcionando; isso pode não ser o caso se o sistema de arquivos estiver montado com %code% .
O atime não é atualizado quando o arquivo é aberto ou gravado, mas apenas quando é lido de uma maneira ou de outra (por read (2), pread (2), execve (2), etc). / p>
Além disso, não há "tempo de criação" no unix; a hora é a hora do status alteração e será atualizada sempre que seus metadados forem alterados ou quando o arquivo for gravado.
Os kernels linux recentes (> 4.11) também sabem sobre a hora de criação / nascimento de um arquivo, acessível através do interface statx (2) . Mas isso não é padrão e ainda não é suportado na maioria das distribuições.