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