os x terminal - cancella i file più vecchi di x giorni

6

prova a creare script che eliminano file più vecchi di X giorni. Sembrava abbastanza semplice ma tutti i file sembrano essere rimossi?

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print -exec rm {} \;

Qualche idea benvenuta !?

Sarebbe anche utile stampare le informazioni sui file per le partite perché forse le mie date sono fuorvianti nel finder?

    
posta v3nt 13.06.2011 - 15:56
fonte

4 risposte

12

Non suggerire mai -exec rm ... .

rm è semplicemente un comando troppo pericoloso. Sempre a secco prima di tutto. IMHO è meglio usare questo:

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 -n1

questo mostrerà la corsa a secco e solo quando sarai soddisfatto puoi aggiungere il rm alla fine

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 rm

Se inizi a utilizzare questa versione di piped to xargs , puoi sempre aggiungere altri filtri, ad esempio:

find /some/where -mtime +3d -print0 | grep -ziE '\.(jpg|png|gif)$' | xargs -0 rm

e simili (più) potenti combinazioni.

    
risposta data 13.06.2011 - 17:44
fonte
2

Per rispondere alla domanda posta nel tuo commento: puoi unire criteri separati semplicemente elencandoli, uno dopo l'altro. Se preferisci, puoi utilizzare -a o -and tra loro, ma questi sono ridondanti. Puoi anche usare -o o -or per l'operatore OR, e puoi usare parentesi - che devono essere quotate per proteggerle dalla shell, come in \( e \) per il raggruppamento.

Per i dettagli completi, esegui: man find

    
risposta data 13.06.2011 - 16:28
fonte
0

È considerato pericoloso usare -exec rm senza prima ls. Probabilmente dovresti controllarlo prima. Il controllo inverso è anche un buon suggerimento per dirti se il tuo tempismo è corretto.

find . -maxdepth 1 -type f -mtime -30d -exec ls -latr {} \;

o

find . -maxdepth 1 -type f -atime -30d -exec ls -latr {} \;
  1. Vincola il risultato della ricerca. Assicurati quello che chiedi esplicitamente.
  2. Confronta per vedere se il risultato opposto è ciò che è stato effettivamente escluso dal tuo comando originale.
  3. Probabilmente -mtime o -atime sono più appropraite ma confrontano ancora il risultato e vedono se sono effettivamente ciò di cui hai bisogno.
risposta data 13.06.2011 - 17:36
fonte
0

Prova questo: find . -ctime +30 | xargs rm -r 2> /dev/null

Per qualche ragione, questo viene eseguito due volte. Quindi ho appena reindirizzato gli errori al buco nero /dev/null

Enjoy.

    
risposta data 16.06.2011 - 02:39
fonte

Leggi altre domande sui tag