wie schreibe ich den Suchausdruck (atime = ctime) (Zugriffszeit = Änderungszeit)

wie schreibe ich den Suchausdruck (atime = ctime) (Zugriffszeit = Änderungszeit)

Ich möchte eine Reihe von Dateien zum Entfernen finden, auf die seit ihrer letzten Inode-Änderung nicht mehr zugegriffen wurde. Dateien, bei denen die letzte Aktivität stattfand, als sie in das Verzeichnis verschoben wurden, in dem sie sich derzeit befinden.

Hier versuche ich, jede Datei als Referenzdatei für den Suchtest zu übergeben -neuer

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

Das habe ich bisher versucht, aber es funktioniert nicht.

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

Antwort1

Dadurch erhalten Sie alle Dateien, die sich zwischen atime und ctime unterscheiden:

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

Sehen Sie sich dieses Beispiel an:

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

Schauen Sie sich nun die Dateistatistiken an:

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

Ich trenne jedes Feld durch eine neue Zeile und jeden Datensatz durch eine Leerzeile, um die nachfolgende Verarbeitung mit awk zu erleichtern: awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'
Hier werden der Feldtrenner und der Datensatztrenner an den Anfang gesetzt (RS interpretiert leeren String als Leerzeile). Das bedeutet, dass $2 und $3 die atime und ctime enthalten. Wenn sie unterschiedlich sind, wird der entsprechende Dateiname (in $1) ausgegeben.

Das Ergebnis hier ist:

./data1

verwandte Informationen