Powershelliä UNIX-ylläpitäjille, osa 8

June 23, 2015 – Samuli Seppänen

Tietyn nimisten tiedostojen (tai tyyppisten) poistaminen hakemistosta on melko suoraviivaista GNU findilla:

$ ls
 README.txt stderr.log stdout.log
 $ find . -maxdepth 1 -type f -name "*.log" -exec rm -f {} +
 $ ls
 README.txt

Valinta "maxdepth 1" estää findia poistamasta tiedostoja mahdollisista alihakemistoista.

Toinen vaihtoehto on putkittaa tiedostolistaus xargsille:

$ ls
 README.txt stderr.log stdout.log
 $ ls *.log|xargs rm -f
 $ ls
 README.txt

Tässä ei kuitenkaan erotella toisistaan tiedostoja ja hakemistoja, joten myös mahdolliset .log -päätteiset hakemistot yrittäisiin poistaa siinä epäonnistuen.

Powershell-ratkaisussa yhdistetään molempia lähestymistapoja:

> Get-ChildItem . -File|Select Name
 
 Name
 ----
 stderr.log
 stdout.log
 README.txt
 
 > Get-ChildItem . -File -Filter "*.log"|Remove-Item
 
 > Get-ChildItem . -File|Select Name
 
 Name
 ----
 README.txt

Parametri -File näyttää hakemistosta vain tiedostot, ei hakemistoja. Jos haluttaisiin poistaa myös alihakemistoista mahdollisesti löytyvät tiedostot, pitäisi Get-ChildItemille antaa parametri -Recurse. Komento Select Name on mukana vain tulosteen selkeyttämiseksi.

Powershelliä UNIX-ylläpitäjille -artikkelisarjan muut osat:

Want to talk to an expert?

If you want to reach us, just send us a message or book a free call!
menucross-circle