Codziennie przesłane przez użytkownika pliki starsze niż miesiąc są usuwane z serwera. Przesyłane przez użytkownika pliki są przechowywane w katalogach z dnia na dzień (np. /var/www/media/2013-03-13
), dzięki czemu można łatwo zidentyfikować pliki/katalog, który należy usunąć.Batch usuń dużą liczbę plików
Problem: Usuwanie 100 000 plików na raz powoduje, że serwer przestaje odpowiadać i zajmuje dużo czasu. (Ubuntu 12.04 z 2x2TB ext4 SATA3 HDD w oprogramowaniu RAID1). W tej chwili PHP wykonuje exec
na polecenie find /path/to/dir -maxdepth 1 -name '*' -delete
.
Jak podzielić pliki wymagane do usunięcia? Wykonanie ls
zajmie naprawdę dużo tych dużych katalogów.
Rozwiązanie nie musi być w PHP. Nie trzeba nawet dzielić plików na mniejsze partie.
Próbowałem 'rm -rfv dirname' oraz' find dirname -maxdepth 1 -print -delete', aby oba wypisywały nazwy plików podczas ich usuwania. W obu przypadkach lista usuniętych plików jest przesyłana strumieniowo na standardowe wyjście, po czym zawiesza się. 'df' pokazuje, że nie są już usuwane żadne pliki .... aż jakiś czas później, więcej plików zostanie usuniętych, a następnie zawiesza się ponownie – Nyxynyx