Jag har en katalog där det finns flera mappar, varje mapp innehåller en .gz-fil. Hur kan jag packa upp dem alla samtidigt?

Mina data ser ut så här

Lista över mappar

A B C D 

I var och en av dem finns filer som

A a.out.gz B b.out.gz C c.out.gz D d.out.gz 

Kommentarer

  • gunzip */*.gz?

Svar

Detta använder gunzip för att packa upp alla filer i en mapp och få slutet .out.gz

gunzip */*.out.gz 

Detta kommer att ”loopa” * genom alla mappar som har en zippad fil i sig. Låt mig lägga till ett exempel:

A a.out.gz B b.out.gz C c.out.gz D d.out.gz E e.out 

Med hjälp av kommandot ovan, a.out.gz b.out.gz c.out.gz d.out.gz blir alla uppackade, men det kommer inte att röra e.out eftersom den inte är zippad.

* detta kallas globbing eller filnamnsexpansion . Du kanske vill läsa mer om det här .

Kommentarer

  • Men tänk om jag har flera mappar som alla innehåller zip-fil. Hur kan jag gå igenom alla mappar?
  • */*.out.gz slingrar alla mappar (det ' är */ del)
  • @HoHoHo som mazs påpekar, detta gör " loop ". Jag ' har lagt till lite extra förklaring och en länk till en sida som ytterligare förklarar konceptet 🙂

Svar

find . -type f -name "*.gz" -execdir gunzip {} \; 

execdir-alternativet för att hitta orsaker ”find” till ”cd” i varje katalog i sin tur och kör exec-kommandot (gunzip in detta fall) och sedan ”cd” tillbaka till cwd

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *