我该如何编写查找表达式(atime = ctime)(访问时间 = 更改时间)

我该如何编写查找表达式(atime = ctime)(访问时间 = 更改时间)

我想找到一组要删除的文件,这些文件自上次更改 inode 以来一直未被访问过。这些文件的最后一次活动发生在它们被移动到当前所在目录时。

在这里我尝试将每个文件作为查找测试的参考文件传递 -newer

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

这是我迄今为止尝试过的,但没有效果。

find . -type f | xargs -I{} find -newerac {} -printf "%p\tinode: %i\naccess: \t%a\nchange: \t%c\n"

答案1

这将为您提供 atime 和 ctime 不同的所有文件:

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

看看这个例子:

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

现在查看文件统计信息:

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

我用换行符分隔每个字段,用空行分隔每个记录,以便于后续使用 awk 进行处理:awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'
此处字段分隔符和记录分隔符设置在开头(RS 将空字符串解释为空行)。这意味着 $2 和 $3 保存 atime 和 ctime。如果它们不同,则会打印相应的文件名(在 $1 中)。

结果是:

./data1

相关内容