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.
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 du shopt -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):
zip -r myfiles.zip mydir
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; skriv man 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
):
$ for file in *; do zip ${file%.*}.zip $file; done
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 av find
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.