Verwijder overeenkomende bestanden in alle subdirectories
Hoe kan ik onder Linux alle .swp bestanden in al mijn subdirectories verwijderen?
Verwijder alle *.swp bestanden onder de huidige directory, gebruik het find
commando in een van de volgende vormen:
find . -name \*.swp -type f -delete
De -delete
optie betekent dat find direct de overeenkomende bestanden zal verwijderen. Dit is de beste overeenkomst met OP’s eigenlijke vraag.
Gebruik van -type f
betekent dat find alleen bestanden zal verwerken.
find . -name \*.swp -type f -exec rm -f {} \;
Optie find . -name \*.swp -type f -exec rm -f {} +
staat find toe om een willekeurig commando per bestand uit te voeren. De eerste variant voert het commando eenmaal per bestand uit, en de tweede voert zo weinig mogelijk commando’s uit door -exec
te vervangen door zo veel mogelijk parameters.
{}
Het pipen van de uitvoer naar find . -name \*.swp -type f -print0 | xargs -0 rm -f
wordt gebruikt voor complexere per-bestandscommando’s dan mogelijk is met xargs
. De optie -exec
vertelt -print0
om overeenkomsten te scheiden met ASCII NULL in plaats van een newline, en find
vertelt -0
om NULL-gescheiden invoer te verwachten. Dit maakt de pipe constructie veilig voor bestandsnamen die spaties bevatten.
Zie xargs
voor meer details en voorbeelden.
Voor het zoeken onder mijn thuismap (en het gebruik van GNU ‘find’ en ‘xargs’), zou ik gebruiken:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
Het gebruik van ‘-print0
’ en ‘-0
’ betekent dat de namen worden gescheiden door ASCII NUL ‘0’-tekens, en dit zal bestandspaden met spaties etc. in de namen afhandelen. Als u denkt dat u mappen (of apparaatbestanden, of FIFO’s, of andere niet-bestanden) onder uw map heeft die eindigen op ‘.swp’, dan kunt u de ‘-type f
’ optie toevoegen aan ‘find’. Als je alleen directories hebt, zal het bovenstaande commando ze niet luidruchtig verwijderen.
Als je alle bestanden uit alle submappen wilt verwijderen, kun je het daarvoor bestemde commando gebruiken,
$ find . -name \* -type f -delete