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:
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
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
-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:
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
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:
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.