Quero encontrar um conjunto de arquivos para remover que não foram acessados desde a última alteração do inode. Arquivos nos quais a última atividade ocorreu quando foram movidos para o diretório em que estão atualmente.
Aqui tento passar cada arquivo como arquivo de referência para o teste find -newer
man find
...
-newerXY reference
Compares the timestamp of the current file with reference.
...
Isso é o que 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"
Responder1
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
Separo cada campo por nova linha e cada registro por linha em branco para facilitar o processamento seguinte com awk: awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'
Aqui o separador de campo e o separador de registro são definidos no início (RS interpreta string vazia como linha em branco). Isso significa que $2 e $3 contêm atime e ctime. Se eles diferirem, o nome do arquivo correspondente (em $1) será impresso.
O resultado aqui é:
./data1