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
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
gunzip */*.gz
?