如何編寫查找表達式(atime = ctime)(訪問時間=更改時間)

如何編寫查找表達式(atime = ctime)(訪問時間=更改時間)

我想找到一組要刪除的文件,這些文件自上次 inode 更改以來尚未被訪問過。當檔案移動到目前所在的目錄時,發生最後一次活動的檔案。

在這裡,我嘗試將每個文件作為 find test -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

相關內容