Saya mencoba mengunduh beberapa .gz
file (bukan NB .tar.gz
) dari URL yang diberikan dan mendekompresnya untuk menimpa file yang ada, jika ada.
Untuk setiap unduhan individu, saya mencoba yang berikut:
curl -O $URL | gunzip -f
Namun, ini tidak bekerja seperti itu gagal dengan: gzip: stdin: unexpected end of file
. Saya menjalankan serangkaian perintah ini di dalam skrip bash shell.
Jika saya menumpahkan perintah menjadi dua langkah eksplisit, yaitu mengunduh file terlebih dahulu, dan kemudian mendekompres .gz
file, itu berhasil.
Mengapa versi perpipaan tidak berfungsi?
curl -O
benar - benar stream file ke output standar? Mungkin Anda memikirkannyawget -O-
?--compressed
, tetapi ini hanya berfungsi untuk respons terkompresi.Jawaban:
Sebuah pipa (diwakili oleh
|
simbol) mengirimkan output standar dari satu proses ke input standar yang lain. Dalam kasus Anda, Anda tampaknya ingin menggunakan file bernama sehingga pipa tidak sesuai - khususnya, tidak ada yang perlu pipa (karenagunzip
kesalahan) karena konten jarak jauh pergi ke file lokal. Sebagai gantinya, Anda perlu mengekstrak nama file - misalnya, dari URL-nya - sesuatu seperti (menggunakan kemampuan manipulasi string bawaan bash)Jika Anda ingin menggunakan pipa, maka cara melakukannya adalah seperti itu
(tanpa
-O
opsi) sehinggacurl
mengalirkan konten jarak jauhstdout
dari tempat itu dapat disalurkan kegunzip
, tetapi kemudian Anda akan perlu mengarahkan kembaligunzip
output untuk menimpa file target yang tidak terkompresi sesuai keperluan .sumber
Ikuti arahan ulang saat mengunduh. Terkadang server web memiliki pengalihan tersembunyi untuk alasan keamanan dan / atau acak. Jika Anda tidak mengikuti arahan ulang, data yang salah akan diunduh dan aplikasi Anda yang membaca data yang disalurkan menjadi bingung. Anda dapat mengikuti arahan ulang dengan ikal menggunakan bendera -L.
sumber