Varolan .gz dosyaları dışında bir dizindeki dosyaları sıkıştırmak için gzip komutunu kullanın


19

Gzip kullanarak sıkıştırmak için bir iş kurmak istediğiniz günlüklerin bir dizin var . Sorun zaten sıkıştırılmış günlükleri yeniden sıkıştırmak istemiyorum.

Kullanmayı denedim ls | grep -v gz | gzip, ama bu işe yaramıyor.

Bunu yapmanın bir yolu var mı? Temelde .gz ile bitmeyen dizindeki her dosyayı gzip etmek istiyorum.

Yanıtlar:


26

Sadece şunları yapabilirsiniz:

gzip *

gzip size zaten bir .gz sonu olan dosyaları atladığını söyleyecektir .
Bu mesaj size engel oluyorsa şunları kullanabilirsiniz:

gzip -q *

Denediğiniz şey işe yaramadı, çünkü gzipstdin'den sıkıştırılacak dosyaların dosya adlarını okumuyor, bunun için çalışmak zorundasınız:

ls | grep -v gz | xargs gzip

Desenli dosyaları gz, yalnızca sonunda değil, dosya adının herhangi bir yerinde hariç tutabilirsiniz ls.

Alt gzipuçtaki dosyaları atlamaya dayanmayan daha temiz bir çözüm, .gzalt dizinlerdeki sıkıştırılmamış dosyaları da işleyen:

find .  -type f ! -name "*.gz" -exec gzip {} \;



Comment Yorumlandığı gibi izkata: .gzbunu geliştirmek için tek başına kullanmak işe yaramaz. Sen kullanmanız gerekir grep -vF .gzya grep -v '\.gz$'. Bu hala lsüretim çıktısını tehlikeye atar


1
“... bu, bir dosya adının bazı iç kısımlarıyla eşleşmeyi daha az mümkün kılar” - bu grep, sadece $daha net kullanmak için kullanın . Ve .yine de gzgz
kaçmadın

1
@Izkata: Hayır, kaçan nokta dahil ve regex'i dosya adının herhangi bir yerinde "gz" izleyen herhangi bir karakter de dahil olmak üzere üç veya daha fazla karakterden oluşan isimlere sahip tüm dosyaları $hariç tutacak şekilde sabitlemez ( -v). Yani "gz" ile başlayan isimleri olan dosyaları içerecektir .
sonraki duyuruya kadar duraklatıldı.

1
@DennisWilliamson Son yorumum net değildi, ayrıca gzadın herhangi bir yerinde (başlangıç hariç) dosyaları da hariç tutacak . Bu yüzden yine de demirlemek daha iyidir. Kullanılmadığında $, .bir normal ifadede ne anlama geldiğini bilmiyormuşsunuz , dolayısıyla kafa karıştırıcı yorumun geri kalanı okundu .
Izkata
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.