como escrevo encontrar expressão (atime = ctime) (tempo de acesso = tempo de alteração)

1

Desejo encontrar um conjunto de arquivos a serem removidos que não foram acessados ​​desde a última alteração do inode. Arquivos nos quais a última atividade aconteceu quando foram movidos para o diretório em que estão atualmente.

Aqui eu tento passar cada arquivo como o arquivo de referência para o teste de localização - novo

man find 
...
-newerXY reference
          Compares  the timestamp of the current file with reference.   
...    

Isto é o que eu tentei até agora, mas não funciona.

find . -type f | xargs -I{} find -newerac {} -printf "%p\tinode: %i\naccess: \t%a\nchange: \t%c\n"
nelaaro
fonte
Para mais informações sobre como o atime é tratado pelos kernels mais recentes. superuser.com/a/464737/67952
nelaaro

Respostas:

4

Isso fornece todos os arquivos que diferem entre atime e ctime:

find . -type f -printf "%p\n%a\n%c\n\n" | \
  awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'

Veja este exemplo:

ls -1
data
data1
ss.08-02-2012-01.22.16-PM.png
ss.09-02-2012-13.42.06-PM.png
test.awk
test.py
test.sh

Agora veja as estatísticas do arquivo:

find . -type f -printf "%p\n%a\n%c\n\n"
./test.sh
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./data1
Tue Aug 21 15:13:13.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./test.awk
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./data
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./test.py
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./ss.09-02-2012-13.42.06-PM.png
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./ss.08-02-2012-01.22.16-PM.png
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

Separei cada campo por nova linha e cada registro por linha em branco para facilitar o processamento com awk: awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'
Aqui, o separador de campos e o separador de registros são definidos no início (o RS interpreta a sequência vazia como uma linha em branco). Isso significa que $ 2 e $ 3 mantêm o atime e o ctime. Se eles diferem, o nome do arquivo correspondente (em $ 1) é impresso.

O resultado aqui é:

./data1
Theodros Zelleke
fonte