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

Cancellare file più vecchi di 5 anni in bash

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

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

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

Messaggio 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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

archimede
Linux 0.x
Linux 0.x
Messaggi: 8
Iscritto il: lun 19 apr 2010, 21: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

Messaggio da archimede »

perchè mi consigli -mtime, se ho bisogno di cancellare quelli creati sino al 2005 (compreso)?

archimede
Linux 0.x
Linux 0.x
Messaggi: 8
Iscritto il: lun 19 apr 2010, 21: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

Messaggio 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è?

metrofox
Linux 3.x
Linux 3.x
Messaggi: 760
Iscritto il: gio 7 ago 2008, 12:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)
Località: London

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

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

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

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

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

Messaggio 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ù)

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

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

Messaggio 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 >)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

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

Messaggio 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)

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

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

Messaggio 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.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
Naitso
Linux 2.x
Linux 2.x
Messaggi: 208
Iscritto il: lun 10 nov 2008, 15:09

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

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

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

Rispondi