Tags voor dit FAQ item:
CentOS Debian Linux

Help ons door dit artikel te beoordelen!

Score van 5 sterren, gebaseerd op 3 beoordelingen

Efficiënt veel bestanden verwijderen op Linux servers

Laatste bijgewerkt: 13/01/2016

We hebben het allemaal wel eens voor: een of ander op hol geslagen script bezorgt hoofdpijn omdat een map - typisch, sessies - volgeschreven werd met miljoenen bestanden. Linux is daar niet echt blij mee, de map verwijderen is geen optie en het trouwe "rm -rf" commando lijkt er ook de brui aan te geven. Om het nog erger te maken: u wil enkel bestanden verwijderen van een paar dagen geleden... Wat zijn de opties?

Het Linux "find" commando is een mogelijke oplossing. Spontaan zullen velen grijpen naar:

find /yourmagicmap/* -type f -mtime +3 -exec rm -f {} \;

Bovenstaand commando zal een lijst genereren van bestanden ouder dan drie dagen en elk gevonden bestand doorgeven aan het rm commando. Met bovenstaande regel is echter één probleem: het zal tijd vragen, want een miljoen keer het rm commando aanroepen is ook niet wat men efficiënt kan noemen.

Een betere optie is onderstaande commando:

 find /yourmagicmap/* -type f -mtime +3 -delete

Daarmee geef je het find commando meteen de opdracht om dit alles ook weg te gooien. Maak er meteen een goede gewoonte van en plaats het in een cronjob, als dit op frequente basis moet gebeuren.

rsync is zonder twijfel een van de handigste commandos als het op bestandsacties aankomt. Rsync kan uiteraard alle mogelijke synchronisaties van volumes afhandelen, maar er is ook een manier om via rsync een map leeg te maken.
We gaan er in dit voorbeeld van uit dat u beschikt over een map genaamd /tmp/empty/ welke leeg is, en een map /tmp/session/ waar teveel rommel in staat. Via onderstaande regel kan u de bestanden verwijderen:

rsync -a --delete /tmp/empty /tmp/session/

rm: massa's bestanden verwijderen is geen optie!

find -exec: een optie, maar traag!

find -delete: snelle manier om massa's bestanden te verwijderen.

rsync --delete: zonder twijfel de snelste!