Zipa alla filer i katalogen?
Finns det ett sätt att komprimera alla filer i en viss katalog med kommandot zip
? Jag har hört talas om att använda *.*
, men jag vill att det ska fungera även för filer utan tillägg.
487
3
Du kan bara använda
*
; det finns inget behov av*.*
. Filtillägg är inte speciella på Unix.*
matchar noll eller flera tecken - inklusive en punkt. Det matchar alltsåfoo.png
, eftersom det är noll eller fler tecken (sju, för att vara exakt).Observera att
*
som standard inte matchar filer som börjar med en punkt (inte heller*.*
). Detta är ofta vad du vill ha. Om inte, i bash, om dushopt -s dotglob
gör det (men utesluter fortfarande.
och..
). Andra skal har andra sätt (eller inget alls) att inkludera dotfiles.Alternativt har
zip
också ett-r
(rekursivt) alternativ för att göra hela katalogträd på en gång (och inte behöva oroa sig för dotfileproblemet):där
mydir
är den katalog som innehåller dina filer. Observera att den producerade zip-filen kommer att innehålla både katalogstrukturen och filerna. Som peterph påpekar i sin kommentar ses detta vanligtvis som en bra sak: genom att extrahera zip-filen kommer alla extraherade filer att lagras snyggt i en underkatalog.Du kan också be zip att inte lagra sökvägarna med alternativet
-j
/--junk-paths
.Kommandot
zip
kommer med dokumentation som berättar om alla dess (många) alternativ; skrivman zip
för att se den dokumentationen. Detta är inte unikt för zip; du kan få dokumentation för de flesta kommandon på detta sätt.I mitt fall ville jag packa varje fil till ett eget arkiv, så jag gjorde följande (i
zsh
):Ett annat sätt är att använda find och xargs: (detta kan inkludera en "."-katalog i zip-filen, men den bör ändå extraheras korrekt. I mitt test tog zip bort pricken före komprimering)
find . -type f -exec zip zipfile.zip {} +
(
+
kan ersättas med\;
om din version avfind
inte har stöd för+
i slutet för exec. Det kommer dock att vara långsammare...)Detta kommer som standard att inkludera alla underkataloger. På GNU find kan
-maxdepth
förhindra detta.