Elimina automaticamente i file dopo la loro scadenza

2

Ho questa idea da un po 'di tempo e mi stavo chiedendo se qualcuno ha visto una simile funzione / app in qualsiasi sistema operativo e se non l'hai fatto, cosa ne pensi. Dove pensi che dovrei iniziare?

L'idea è semplice. Penso che tutti noi abbiamo quei file che sono fatti e probabilmente usati per qualche giorno e poi vengono lasciati sul nostro disco e non li cancelliamo mai o controlliamo per vedere se ne abbiamo ancora bisogno. Sarebbe bello se si potesse fare clic destro su un file e fare clic su "Scadenza in .. 3 giorni" per esempio. E il file viene eliminato dopo 3 giorni. Ho un grande bisogno di questo e forse alcuni persone lo troveranno utile.

Stavo pensando di scrivere uno script e utilizzare il progetto Nautilus Action in GNOME per un iniziare.

    
posta Auxiliary 23.05.2012 - 15:03
fonte

7 risposte

4

Where do you think I should begin?

Inizia scrivendo una serie di casi d'uso che descrivono tutti i diversi modi in cui puoi immaginare che le persone possano usare la scadenza dei file. Annota anche i rischi (distruzione automatica delle prove, problemi di sicurezza, ecc.).

Successivamente, scopri come dovrebbe funzionare la funzione. Come manterrai traccia della data di scadenza del file? C'è un modo per ottenere un file scaduto, o sarà davvero cancellato? Sarebbe meglio avere il file system semplicemente nascondi file scaduti e cancellarli solo quando lo spazio è necessario? Sviluppare una comprensione dettagliata del comportamento della funzione ora ti farà risparmiare molto tempo e fatica in seguito.

Il prossimo passo è progettare la funzione. Creare una sorta di documento di progettazione ti aiuterà a rimanere in pista e ricordare cosa stai facendo anche quando la vita interviene ad un certo punto e devi allontanarti dal progetto per alcuni giorni o settimane. Ti aiuterà anche a spiegare il progetto agli altri in futuro. Non deve essere bello, ma cerca di catturare quante più decisioni hai preso e le ragioni che stanno dietro di loro come puoi: ciò che è ovvio per te oggi non sarà tra pochi mesi.

Una volta che hai un design, puoi iniziare a implementarlo. A seconda del tuo stile, questo potrebbe significare che scrivi per prima cosa una serie di test, o vai direttamente dentro e inizia a lavorare sulla funzionalità stessa ... ma in realtà non rientra nello scopo della tua domanda.

    
risposta data 23.05.2012 - 17:03
fonte
4

L'implementazione del prototipo SEFS - Self Expiring File System è stata progettata sulla base del File file FUSE . Ho fatto questo per il mio Master in Informatica.

    
risposta data 27.03.2013 - 17:30
fonte
3

Ho fatto cose simili diverse volte in passato, sempre con un demone o un cron job. Non ho visto (o almeno notato) alcun file system che supporta una data di scadenza esplicita, ho sempre dovuto andare al tempo dell'ultimo accesso. È abbastanza semplice avere un cron job che esegue semplicemente find $search_path -atime +3 -exec rm {} \; , ma ci sono molti modi per migliorarlo.

    
risposta data 23.05.2012 - 15:16
fonte
2

Crea un processo cron per eliminare tutti i file nella cartella tmp globale del tuo sistema se è precedente a 14 o 30 giorni (è importante avere una cartella speciale per questo, dove è trasparente per tutti che la vita dei file che vivono lì è limitata). Se qualcuno vuole che un file non venga cancellato automaticamente, non deve salvarlo nella cartella tmp .

Questo era uno standard sui sistemi UNIX su cui dovevo lavorare più di 20 anni fa. Dato che c'erano più utenti in quel momento, tutti quelli che lavoravano su una macchina usando terminali stupidi e lo storage era costoso quei tempi, la pulizia automatica era molto importante per mantenere il sistema in esecuzione.

    
risposta data 23.05.2012 - 18:45
fonte
2

È possibile aggiungere l'opzione per fare clic con il tasto destro del mouse su un file e impostare l'ora di scadenza tramite un elenco predefinito di (1 giorno, 2 giorni, 3 giorni, 4 giorni, 5 giorni, 1 settimana, 2 settimane, 1 mese, X giorni). Dopo che qualcuno ha aggiunto la data di scadenza, dovresti averlo memorizzato in un file (es: C: \ Programmi \ File Scadere \ files_to_expire.dat) e avere il formato di (aggiunto time_stamp, expire_time, posizione del file).

Quindi imposta qualcosa che passa ciclicamente e legge quel file ogni poche ore, in quanto non sarebbe richiesto istantaneamente.

È inoltre possibile spostare i file in una directory e comprimere anziché eliminarli e consentire a una GUI di tornare ai vecchi file e recuperarli su richiesta. Puoi anche impostare uno spazio o una durata massima della vecchia cartella di file e alla fine li eliminerà definitivamente.

    
risposta data 23.05.2012 - 16:22
fonte
1

Suppongo che le persone che eseguono server o altri sistemi con spazio limitato eseguano lavori batch pianificati per verificare la presenza di file che devono essere eliminati.

Il sistema operativo IBM MVS (ora z / OS) ha la capacità di eliminare automaticamente i set di dati scaduti.

    
risposta data 23.05.2012 - 15:07
fonte
1

Ho configurato il mio server web con una directory specifica per i file che sto offrendo per il download per un periodo di tempo limitato.

crontab:

@daily /path-to-script/autoexpire.pl >/dev/null 2>&1

autoexpire.pl guarda in quella directory per i file con lo schema * _expYYYY-MM-DD. * (come file-per-Joe_exp2013-11-30.doc). Qualsiasi file denominato esplicitamente con una data di scadenza nel nome file verrà eliminato una volta scaduta la data di scadenza.

#!/usr/bin/perl -w
use strict;

my $expdir="/path-to-my-static-webpages/htdocs/autoexpire";
my $today='date +%Y-%m-%d'; chomp $today; # get date (human readable)
my $t=$today;
$t=~s/-//g; # make date numeric for comparison

chdir($expdir) or die "$!";
my @files = glob("*_exp*");

foreach my $file (@files){
        next unless($file=~/\W/);
        if($file=~/_exp(\d\d\d\d-\d\d-\d\d)\./){
                my $f=$1;
                $f=~s/-//g; # make expiry numeric for comparison
                print "checking $file against $today ... ";
                if($f < $t){
                        print "$f < $t. unlinking.\n";
                        unlink("$expdir/$file");
                }else{
                        print "$f !< $t. ignoring.\n"
                }
        }
}
    
risposta data 10.11.2013 - 17:33
fonte