Rimozione di file più vecchi di 1 mese, ma lasciare i file creati il ​​1 ° giorno del mese


2

Sto cercando di rimuovere alcuni file di archivio da una cartella su un fileserver CentOS con un cronjob. I requisiti:

  1. Rimuovi i file del mese scorso
  2. Il file .tgz del primo giorno del mese dovrebbe essere lasciato intatto.

So che posso rimuovere i file più vecchi di x giorni con:

find /path -mtime +30 -exec rm {} \;

Tuttavia, questo non lascerà da solo l'archivio creato il primo giorno del mese. Internet non sembra fornire una risposta (ancora).


I tuoi file prendono il nome dalla data, come ad es. log-2013-02-27.tgz e simili? In quel caso potresti correre touch *-01.tgz prima di find comando. Tutti i file dal primo di ogni mese devono essere aggiornati con il timestamp corrente e quindi non corrispondenti.
Daniel Andersson

Non usando +29 invece di +30 fare?
terdon

Che ne dite di find /path -mtime +30 ! -name log-2013-02-01.tgz -exec rm {} \;?
Scott

Risposte:


3

Prima una nota

Sui file system unix non si hanno informazioni sul tempo di creazione di un file. Quello che è spesso chiamata ctime è il tempo di cambio di stato di un file. Questo potrebbe cambiare con la ridenominazione dei file o le modifiche ai permessi.

Guarda questo collegamento per maggiori informazioni

Quindi, tieni presente che la seguente soluzione potrebbe non funzionare.

Soluzione con l'aiuto di awk

find non ha operatore per la selezione di una data speciale. Quindi il trucco è per creare un output con il giorno del mese e il nome del file e l'utilizzo un separatore che non fa parte dei nomi dei file. presumo che # è un possibile separatore di caratteri.

 find . -mtime +30 -printf "%Cd#%p\n"

In un secondo passaggio puoi filtrare i file indesiderati.

 find . -mtime +30 -printf '%Cd#%p\n' |awk -F'#' '$1 !~ /^01/{print $2;}'

Soluzione con l'aiuto di grep e cut

Fare lo stesso trucco di cui sopra.

 find . -mtime +30 -printf '%Cd#%p\n' |grep -v '^01' |cut -d '#' -f 2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.