I file caricati dall'utente ogni giorno più di un mese vengono eliminati dal server. I caricamenti degli utenti vengono memorizzati nelle directory di giorno in giorno (ad esempio /var/www/media/2013-03-13
), quindi è facile identificare i file/directory che devono essere eliminati.Lotto elimina un numero elevato di file
Problema: L'eliminazione di 100.000 file alla volta rende il server non risponde e richiede molto tempo. (Ubuntu 12.04 con 2x2TB ext4 SATA3 hdd nel software RAID1). Al momento PHP sta facendo exec
sul comando find /path/to/dir -maxdepth 1 -name '*' -delete
.
Come dividere i file necessari per la cancellazione? Fare un ls
impiegherà molto tempo su quelle grandi directory.
La soluzione non deve essere in PHP. Non ha nemmeno bisogno di dividere i file in lotti più piccoli
Ho provato 'rm -rfv dirname' e' find dirname -maxdepth 1 -print -delete' in modo che entrambi stampino i nomi dei file mentre eliminano. In entrambi i casi, l'elenco dei file eliminati viene trasmesso in streaming su stdout, quindi si blocca lì. 'df' mostra che non vengono più cancellati file .... fino a qualche tempo dopo, vengono mostrati altri file da eliminare, quindi si blocca di nuovo – Nyxynyx