find … -exec rm {} \; esegue il rm comando per ogni file. Anche se l'avvio di un nuovo processo è piuttosto rapido, è comunque molto più lento del semplice atto di eliminare un file.
find … -exec rm {} + chiamerebbe rm in batch, che è molto più veloce:paghi il costo dell'esecuzione di rm una volta per batch e ogni batch esegue molte eliminazioni.
Ancora più veloce è non invocare rm affatto. Il find Il comando su Linux ha un'azione -delete per eliminare un file corrispondente.
find ./cache -type f -mtime +0.5 -delete
Tuttavia, se stai producendo file a una velocità tale che find … -exec rm {} \; non riesco a tenere il passo, probabilmente c'è qualcosa che non va nella tua configurazione. Se cache contiene milioni di file, dovresti suddividerlo in sottodirectory per un accesso più rapido.
Prova a utilizzare xargs :
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Spiegazione dell'aggiornamento per @pradeepchhetri
Se usi find con -exec , ogni file che find found chiamerà rm Una volta. Quindi, se hai trovato un numero enorme di file, ad esempio 10000 file, hai chiamato rm 10000 volte.
xargs tratterà l'output di find come argomento del comando a rm , in modo che xargs fornisca tanti argomenti quanti sono rm può gestire contemporaneamente, ad esempio rm -f file1 file2 ... Quindi fa meno chiamate fork, rende il programma più veloce.