Repository 32bit  Forum
Repository 64bit  Wiki

Cancellare file più vecchi di 5 anni in bash

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Cancellare file più vecchi di 5 anni in bash

Messaggioda archimede » mer giu 30, 2010 23:27

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.
archimede
Linux 1.0
Linux 1.0
 
Messaggi: 8
Iscritto il: lun apr 19, 2010 20:21
Slackware: 13 e current
Kernel: 2.6.33
Desktop: kde
Distribuzione: ubuntu 9.10

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

Messaggioda ZeroUno » mer giu 30, 2010 23:35

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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4412
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

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

Messaggioda archimede » mer giu 30, 2010 23:40

perchè mi consigli -mtime, se ho bisogno di cancellare quelli creati sino al 2005 (compreso)?
archimede
Linux 1.0
Linux 1.0
 
Messaggi: 8
Iscritto il: lun apr 19, 2010 20:21
Slackware: 13 e current
Kernel: 2.6.33
Desktop: kde
Distribuzione: ubuntu 9.10

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

Messaggioda archimede » mer giu 30, 2010 23:49

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è?
archimede
Linux 1.0
Linux 1.0
 
Messaggi: 8
Iscritto il: lun apr 19, 2010 20:21
Slackware: 13 e current
Kernel: 2.6.33
Desktop: kde
Distribuzione: ubuntu 9.10

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

Messaggioda metrofox » gio lug 01, 2010 1:29

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
Avatar utente
metrofox
Linux 2.6
Linux 2.6
 
Messaggi: 758
Iscritto il: gio ago 07, 2008 11:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)

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

Messaggioda targzeta » gio lug 01, 2010 8:49

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6185
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

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

Messaggioda masalapianta » gio lug 01, 2010 9:27

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ù)
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

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

Messaggioda ZeroUno » gio lug 01, 2010 10:31

Codice: Seleziona tutto
# debugfs -R 'stat <2227108>' /dev/sda3|grep crtime

in cui 2227108 è il numero di inode (vanno inserite anche le < e >)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4412
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

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

Messaggioda masalapianta » gio lug 01, 2010 11:06

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)
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

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

Messaggioda ZeroUno » gio lug 01, 2010 16:44

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.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4412
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

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

Messaggioda Naitso » gio lug 01, 2010 17:00

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
Avatar utente
Naitso
Linux 2.4
Linux 2.4
 
Messaggi: 200
Iscritto il: lun nov 10, 2008 15:09

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

Messaggioda conraid » gio lug 01, 2010 17:08

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.
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti