Pagina 1 di 1

Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 0:27
da archimede
Salve a tutti,

ho un piccolo problema da risolvere, dovrei cancellare da una directory che contiene circa 60.000 file quelli antecedenti il 2006 e mantenere quelli dal 2006 sino ad oggi, lo vorrei fare con uno script o comando bash. Qualche suggerimento?

Io ho pensato di usare il comando find con l'opzione -ctime in questa maniera:

Codice: Seleziona tutto

find /tmp/ -ctime +1825 -exec rm {} \;
Ora sono a casa e non posso usarlo non ho file così vecchi, mi chiedevo se può funzionare.

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 0:35
da ZeroUno
Dai la find in un'altra directory (p.e. /var) che di file vecchiotti ce ne trovi.

Codice: Seleziona tutto

# find /var -mtime +6164 -ls
264713    4 drwxrwxr-x   2 uucp     uucp         4096 Aug 13  1993 /var/spool/uucppublic

oppure creane uno

Codice: Seleziona tutto

touch -t 200001010000 /tmp/oldfile
usa -mtime al posto di -ctime

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 0:40
da archimede
perchè mi consigli -mtime, se ho bisogno di cancellare quelli creati sino al 2005 (compreso)?

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 0:49
da archimede
Ho creato dei file vecchi col comando touch:

touch -t 200501010000 oldfile2

touch -t 200001010000 oldfile


ed ho provato a dare il find in questa maniera:

find . -ctime +1825 -exec echo {} \;

ma non funziona, perchè?

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 2:29
da metrofox
Prova con:

Codice: Seleziona tutto

find . -atime +1825 -exec echo {} \;

Codice: Seleziona tutto

-atime n
              File was last accessed n*24 hours ago.  When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is           ignored, so to match -atime +1, a
              file has to have been accessed at least two days ago.
Comunque, se vuoi fare 5 anni precisi, ricorda che Febbraio ogni 4 anni è di 29 giorni al posto di 28, quindi... 1825 + 1

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 9:49
da targzeta
Un altra alternativa è creare un file di riferimento e poi usare l'opzione '! -anewer'.

Codice: Seleziona tutto

$> touch -t 200001010001 ref
$> touch -t 200001010000 oldfile
$> touch -t 199901010000 oldfile1
$> find . ! -anewer ref
./ref
./oldfile1
./oldfile
(ovviamente anche il file di riferimento non è più nuovo di se stesso)

Poi, una volta controllato l'output, oppure se ti fidi dai:

Codice: Seleziona tutto

$> find . ! -anewer ref | xargs rm
che cancella i file.
Emanuele

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 10:27
da masalapianta
archimede ha scritto: ho bisogno di cancellare quelli creati sino al 2005 (compreso)?
quel che chiedi non è possibile su normali filesystem unix (non tengono traccia della data di creazione, al limite con ctime puoi discriminare in base alla data di ultima modifica all'inode, ma nulla di più)

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 11:31
da ZeroUno

Codice: Seleziona tutto

# debugfs -R 'stat <2227108>' /dev/sda3|grep crtime
in cui 2227108 è il numero di inode (vanno inserite anche le < e >)

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 12:06
da masalapianta
ZeroUno ha scritto:

Codice: Seleziona tutto

# debugfs -R 'stat <2227108>' /dev/sda3|grep crtime
in cui 2227108 è il numero di inode (vanno inserite anche le < e >)
come detto, i normali fs unix non tengono traccia della data di creazione, difatti crtime mi sembra si trovi solo negli ultimissimi fs (tipo ext4)

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 17:44
da ZeroUno
diversi anni fa ho ricavato il creation time su solaris (filesystem UFS), ma con una comandi completamente differenti.
Io credo che ci sia su tutti. Su ntfs lo so per certo (se da windows fai tasto destro-proprietà del file vedi la data di accesso,modifica,creazione del file), fat non lo so.

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 18:00
da Naitso
in un server FTP ho impostato questo nei cronjob

Codice: Seleziona tutto

/usr/bin/find /home/ftpuser/SMB/FTP -type f -ctime 40 -exec /bin/rm '{}' \;
in sostanza nell'ftp rimangono solo i file con meno di 40 giorni
il filesystem usato è reiserfs
Ciao

Re: Cancellare file più vecchi di 5 anni in bash

Inviato: gio 1 lug 2010, 18:08
da conraid
ZeroUno ha scritto:diversi anni fa ho ricavato il creation time su solaris (filesystem UFS), ma con una comandi completamente differenti.
Io credo che ci sia su tutti. Su ntfs lo so per certo (se da windows fai tasto destro-proprietà del file vedi la data di accesso,modifica,creazione del file), fat non lo so.
beh, hai citato due tra i pochi che ce l'hanno :-)
anche hfs (quello di osx) ce l'ha, per il resto solo ext4 (ext2 e 3 non ce l'hanno sicuramente), e comunque non è proprio agevole cercare i file in questo modo, le utility varie non leggono il "birth time" come viene chiamato.