Belirli bir dizindeki tüm dosyaları zip
komutu ile sıkıştırmanın bir yolu var mı? .` kullanıldığını duydum, ancak bunun uzantısız dosyalar için de çalışmasını istiyorum.
Sadece *
kullanabilirsiniz; *.*
kullanmanıza gerek yoktur. Dosya uzantıları Unix'te özel değildir. *, nokta dahil olmak üzere sıfır veya daha fazla karakterle eşleşir. Yani
foo.png` ile eşleşir, çünkü bu sıfır veya daha fazla karakterdir (tam olarak yedi).
Varsayılan olarak *
'in nokta ile başlayan dosyalarla eşleşmediğini unutmayın (*.*
de eşleşmez). Bu genellikle istediğiniz şeydir. Değilse, bash'te shopt -s dotglob
yaparsanız eşleşir (ancak yine de .
ve ..
'yi hariç tutacaktır). Diğer kabukların nokta dosyalarını dahil etmek için farklı yolları vardır (veya hiç yoktur).
Alternatif olarak, zip
ayrıca tüm dizin ağaçlarını bir kerede yapmak için (ve dotfile sorunu hakkında endişelenmenize gerek kalmadan) bir -r
(özyinelemeli) seçeneğine sahiptir:
zip -r myfiles.zip mydir
burada mydir
dosyalarınızın bulunduğu dizindir. Üretilen zip'in dosyaların yanı sıra dizin yapısını da içereceğini unutmayın. Peterph'in yorumunda belirttiği gibi, bu genellikle iyi bir şey olarak görülür: zip'i çıkarmak, çıkarılan tüm dosyaları tek bir alt dizinde düzgün bir şekilde saklayacaktır.
Ayrıca zip'e -j
/--junk-paths
seçeneği ile yolları saklamamasını da söyleyebilirsiniz.
zipkomutu, tüm (birçok) seçenekleri hakkında bilgi veren belgelerle birlikte gelir; bu belgeleri görmek için
man zipyazın. Bu sadece zip
e özgü değildir; çoğu komut için bu şekilde dokümantasyon alabilirsiniz.
Benim durumumda her dosyayı kendi arşivine sıkıştırmak istedim, bu yüzden aşağıdakileri yaptım (zsh
içinde):
$ for file in *; do zip ${file%.*}.zip $file; done
Başka bir yol da find ve xargs: kullanmak olabilir (bu zip içinde bir "." dizini içerebilir, ancak yine de doğru şekilde çıkarılmalıdır. Benim testimde, zip sıkıştırmadan önce noktayı çıkardı)
bul . -type f -exec zip zipfile.zip {} +
(Eğer find
sürümünüz exec için +
sonunu desteklemiyorsa +
\;
ile değiştirilebilir. Yine de daha yavaş olacaktır...)
Bu varsayılan olarak tüm alt dizinleri içerecektir. GNU find üzerinde -maxdepth
bunu önleyebilir.