2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Verwijder overeenkomende bestanden in alle subdirectories

Hoe kan ik onder Linux alle .swp bestanden in al mijn subdirectories verwijderen?

Antwoorden (5)

147
147
147
2010-02-22 13:59:15 +0000

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.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Het wissen zelf laten doen, verwijdert elk risico op spaties in bestandsnamen, … Voor extra veiligheid kun je ook overwegen om -type f toe te voegen voor alleen bestanden.

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
2
2
2
2010-02-22 14:04:52 +0000

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.

0
0
0
2019-11-17 04:04:10 +0000

Als je alle bestanden uit alle submappen wilt verwijderen, kun je het daarvoor bestemde commando gebruiken,

$ find . -name \* -type f -delete