Page 1 of 1

shell: Datei löschen, wenn Zugriff erfolgte

Posted: 2005-02-19 17:57
by daniel_p
Hi Forum,

ich habe hier ein kleines "Denkansatz-Problem". Folgendes: Ich habe ein Verzeichnis in dem eine Software eine Datei anlegt. Sobald jemand die Datei via TFTP ausliest soll genau diese Datei gelöscht werden. Nach und nach liegen jetzt einige Dateien in dem Verzeichnis - einige "unberührt" ander wurden eben gelesen/accessed. Genau diese will ich nun löschen...

Mein bisheriger theoretischer Ansatz war nun die "ctime" und "atime" der Dateien zu vergleichen und sobald atime!=ctime bei einer Datei soll diese gelöscht werden. Dazu fehlt momentan noch eine Umsetzung - habe mit find hantiert und es nicht hinbekommen.

Alternativ irgendwie so etwas mit temporären Dateien und vielleicht diff:

Code: Select all

ll --time=ctime --time-style=full-iso
insgesamt 32
drwxr-xr-x  2 root root 368 2005-02-19 17:24:08.236037064 +0100 .
drwxr-xr-x  4 root root 448 2005-02-08 16:27:36.000000000 +0100 ..
-rw-r--r--  1 root root 132 2005-02-08 15:24:19.000000000 +0100 DATEI

ll --time=atime --time-style=full-iso
insgesamt 32
drwxr-xr-x  2 root root 368 2005-02-19 17:53:20.004685149 +0100 .
drwxr-xr-x  4 root root 448 2005-02-19 17:41:06.822763202 +0100 ..
-rw-r--r--  1 root root 132 2005-02-19 15:51:41.869919100 +0100 DATEI
und dann irgendwie mit diff? Ich bin ratlos...

Kann man überhaupt irgendwie einfach feststellen, ob eine Datei gelesen wurde (atime?).

Vielen Dank für alles!
daniel[/code]

Re: shell: Datei löschen, wenn Zugriff erfolgte

Posted: 2005-02-19 18:35
by t0x1c
evtl. regelmässig die ftp-logs durchschauen lassen, ob die entsprechende Datei runtergeladen wurde, wenn ja -> Datei löschen..

Re: shell: Datei löschen, wenn Zugriff erfolgte

Posted: 2005-02-19 19:59
by alexander newald
Dies findet die Dateien:

Das Verzeichnis als Argument

Code: Select all

#!/usr/bin/perl



foreach my $file (local_filelist($ARGV[0])) {
        if ( (stat("$ARGV[0]/$file"))[9] != (stat("$ARGV[0]/$file"))[8] ) {
                print "$ARGV[0]/$filen";
                }
        }


sub local_filelist {
        my $curdir = $_[0];
        my @dirs = ();
        opendir(TMPDIRLIST,"$curdir");
        while (defined($_=readdir(TMPDIRLIST))) {
                if ((!-d "$curdir/$_") and ($_ ne ".") and ($_ ne "..")) {
                        push(@files,$_);
                        }
                }
        return @files;
        }

Re: shell: Datei löschen, wenn Zugriff erfolgte

Posted: 2005-02-19 21:45
by daniel_p
Tausend Dank! Genau DAS habe ich gesucht........

Habs jetzt so eingebaut:

Code: Select all

rm `./deinskript.pl dir`
Daniel