kıvırın .gz dosyası ve dekompresyon için boru


13

Verilen URL'lerden bazı .gzdosyaları (NB .tar.gzolanlar değil ) indirmeye ve varsa varolan dosyaların üzerine yazmak için sıkıştırmasını kaldırmaya çalışıyorum.

Her bir indirme için aşağıdakileri denedim:

curl -O $URL | gunzip -f

O başarısız Ancak, bu işe yaramadı: gzip: stdin: unexpected end of file. Bu komutun bir dizisini bash kabuk betiğinin içinde çalıştırdım.

Komutu iki açık adıma döktüysem, yani önce dosyayı indirin ve sonra .gzdosyayı açın, çalışır.

Borulu sürüm neden çalışmıyor?


1
curl -ODosyayı gerçekten standart çıktıya aktardığından emin misiniz ? Belki de düşünüyorsun wget -O-?
steeldriver

@steeldriver cevap kıvırmak olarak göndermelisiniz | tar xz ...
Panther

Ayrıca var --compressed, ancak bu sadece sıkıştırılmış yanıtlar için çalışıyor.
kenorb

Yanıtlar:


18

Bir boru ( |sembolle gösterilir) bir işlemin standart çıktısını bir diğerinin standart girdisine gönderir . Sizin durumunuzda, bir kanalın uygun olmaması için adlandırılmış bir dosya kullanmak istiyor gibi görünüyorsunuz gunzip. Bunun yerine, dosyanın adını (örneğin, URL'sinden) çıkarmanız gerekir (bash'ın yerleşik dize düzenleme yeteneklerini kullanarak)

curl -O "$URL" && gunzip -f "${URL##*/}"

Bir boru kullanmak istiyorsanız, o zaman bunu yapmanın yolu

curl "$URL" | gunzip -c

( -Oseçenek olmadan ), böylece curluzak içeriği stdoutboruya bağlanabileceği yerden akışa gönderir gunzip, ancak daha sonra gunziphedef sıkıştırılmamış dosyanın üzerine uygun şekilde yazmak için çıktıyı yeniden yönlendirmeniz gerekir .


6

İndirme sırasında yönlendirmeleri takip edin. Bazen bir web sunucusu, güvenlik ve / veya rastgele nedenlerle gizli yönlendirmeler yapabilir. Yönlendirmeyi takip etmezseniz, yanlış veriler indirilir ve borulu verileri okuyan uygulamanız karışır. -L bayrağını kullanarak yeniden yönlendirmeleri curl ile takip edebilirsiniz.

curl -L https://example.com/mygzip.tar.gz | tar zxv
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.