Minun on ladattava tiedosto tästä -linkistä . Tiedoston lataus on zip-tiedosto, jonka minun on purettava nykyisessä kansiossa.
Normaalisti lataisin sen ensin ja suoritin sitten pura-komennon.
$ wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip $ unzip temp.zip
Mutta tällä tavalla minun on suoritettava kaksi komentoa, odotettava ensimmäisen suorittamista seuraavan suorittamiseksi, ja minun on myös tiedettävä tiedoston nimi temp.zip
antaa sille unzip
.
Voiko wget
-lähdön uudelleenohjata div id = ”700ba6affc”>
? Jotain sellaista kuin
$ unzip < `wget http://www.vim.org/scripts/download_script.php?src_id=11834`
Mutta se ei toiminut.
bash:
wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip
: epäselvä uudelleenohjaus
Myös wget
suoritettiin kahdesti ja ladasi tiedoston kahdesti.
Kommentit
- Jälkimmäisessä esimerkissä wget suoritettiin todennäköisesti kahdesti, koska? on kuoren erikoismerkki URL-osoitteen asettaminen ” ” s: iin pitäisi auttaa.
- Tällä ketjulla näyttää olevan ratkaisu. Haven ’ ei kokeillut sitä itse. serverfault.com/questions/26474/…
Vastaa
Sinun on ladattava tiedostosi temp-tiedostoon, koska (lainaa purettua man sivu):
Vakiotulosta luettuja arkistoja ei vielä tueta, paitsi funzipillä (ja sitten vain ensimmäiset m Arkiston ihminen voidaan purkaa).
Tuo komennot vain yhteen:
wget "http://www.vim.org/scripts/download_script.php?src_id=11834" -O temp.zip unzip temp.zip rm temp.zip
Mutta joustavuuden lisäämiseksi sinun on todennäköisesti laitettava se komentosarjaan, jotta säästät kirjoittamista ja varmistaaksesi, ettet vahingossa korvaa jotain, jota voit käyttää mktemp
-komento turvallisen tiedostonimen luomiseksi temp-tiedostollesi:
#!/bin/bash TMPFILE=`mktemp` PWD=`pwd` wget "$1" -O $TMPFILE unzip -d $PWD $TMPFILE rm $TMPFILE
kommentit
- on
wget file.zip && unzip file.zip
sama kuinwget file.zip; unzip file.zip
vai onko toinen mieluummin kuin toinen? Kiitos 🙂 - @NextLocal
wget && unzip
puretaan vain, jos wget onnistui.wget ; unzip
suoritetaan joka tapauksessa purettu purkaminen, mahdollisesti osoittamalla olemassa olevaan tiedostoon. - funzip oli vastaus, jota etsin. Terraform (jostain syystä) pakkaa sen ’ binaarin yhtenä tiedostona zip-arkistoon, joten tämä oli täydellinen minulle.
Vastaa
Tämä on vastaukseni uudelleenlähetys samankaltaiseen kysymykseen:
ZIP-tiedostomuoto sisältää hakemiston (hakemisto) arkiston lopussa. Tämä hakemisto kertoo, missä arkistossa kukin tiedosto sijaitsee, ja mahdollistaa siten nopean, satunnaisen pääsyn lukematta koko arkistoa.
Tämä näyttäisi aiheuttavan ongelman, kun yritetään lukea ZIP-arkistoa putki, koska hakemistoon pääsee vasta loppuun asti, joten yksittäisiä jäseniä ei voida purkaa oikein ennen kuin tiedosto on kokonaan luettu eikä niitä enää ole saatavilla. Sellaisena ei vaikuta yllättävältä, että useimmat ZIP-dekompressorit epäonnistuvat yksinkertaisesti, kun arkisto toimitetaan putken kautta.
Arkiston lopussa oleva hakemisto ei ole ainoa paikka, jossa tiedoston meta tiedot tallennetaan arkistoon. Lisäksi yksittäiset merkinnät sisältävät nämä tiedot myös paikallisen tiedoston otsikossa redundanssia varten.
Vaikka kaikki ZIP-dekompressorit eivät käytä paikallisia tiedostotunnisteita, kun hakemisto ei ole käytettävissä, tar- ja cpio-etupäät libarchiveen (alias bsdtar ja bsdcpio) voivat ja tekevät , kun lukeminen putken läpi, mikä tarkoittaa, että seuraava on mahdollista:
wget -qO- http://example.org/file.zip | bsdtar -xvf-
kommentit
- Tämä on erinomaista ! Huomaan, että terva antaa minulle varoituksia pakkaamattomien tietojen väärästä koosta (odotettavissa 0), mutta itse tiedostot näyttävät olevan vahingoittumattomia. Arvaus johtuu hakemiston puuttumisesta.
- Minulla on täällä
.zip
-tiedosto, joka sisältää tiedostoja, joilla on suoritettavat oikeudet. Kun lataan ja lähetän levynbsdtar
-sarjaan, exec-bitit heitetään pois. Kun lataan levylle ja puran tiedostonbsdtar
taiunzip
, exec-bitit kunnioitetaan. - // , @GolarRamblar, saitko koskaan tietää miksi?
- @NathanBasanese: täällä on vastaus. Lyhyesti sanottuna: ZIP-arkistossa on kaksi paikkaa, johon se tallentaa tällaisia tietoja, jotka voivat olla epäjohdonmukaisia, ja riippuen siitä, onko tiedosto
bsdtar
avattava, haetaan vai ei, se käyttää yhtä tai toista paikkaa .
vastaus
Jos JDK on asennettu, voit käyttää jar
:
wget -qO- http://example.org/file.zip | jar xvf /dev/stdin
kommentit
- Huomasin juuri, että
jar
ei säilytä ’ t tiedostojen käyttöoikeuksia. Hieno temppu muuten. - Sinun ’ ei tarvitse antaa tiedoston param-parametria, käytä vain
| jar xv
- Minäkin oletus puri minua, koska
jar
voitiin käyttää korvaamaanunzip
; Valitettavastijar
ei palauta purettuja tiedostoja ’; - Käytä vain
| jar x
-
jar
on paljon mukavampaa käsitellä UTF-8-tiedostonimiä.unzip
sekoittanut asioita.
Vastaa
En ”t” luulet, että haluat jopa häiritä wget-lähdön purkamista purettavaksi.
Wikipedia ”ZIP (tiedostomuoto)” -artikkelista:
ZIP-tiedosto tunnistetaan tiedoston lopussa olevan keskihakemiston avulla.
wgetin on suoritettava lataus kokonaan loppuun, ennen kuin purkaminen voi tehdä mitään työtä, joten ne suoritetaan peräkkäin, eivät ole kietoutuneet yhteen, kuten luulisi.
Vastaa
vastaukseni uudelleenlähetys:
BusyBox ”s unzip
voi ottaa stdinin ja purkaa kaikki tiedostot.
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | busybox unzip -
unzip
-viivan jälkeen on käytettävä stdiniä syötteenä.
Voit jopa,
cat file.zip | busybox unzip -
Mutta se on vain tarpeeton unzip file.zip
.
Jos distroosi käyttää BusyBoa x oletuksena (esim. Alpine), suorita vain unzip -
.
Kommentit
- edelleen osoitteeseen @Saftever ’ vastauksen, jota en ’ en saa kommentoida, busybox toimii, mutta versiot 1.27.0 vanhemmat voittivat ’ t turhan lseekin takia, katso changelog busybox.net
Vastaa
Oikea syntaksin muoto olisi:
$ unzip <(curl -sL https://www.winpcap.org/archive/1.0-docs.zip)
mutta se ei toimi virheen takia ( Info-ZIP Debian ):
lseek(3, 0, SEEK_SET) = -1 ESPIPE (Illegal seek) Archive: /dev/fd/63 End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive. unzip: cannot find zipfile directory in one of /dev/fd/63 or /dev/fd/63.zip, and cannot find /dev/fd/63.ZIP, period.
tai BSD / OS X: ssä:
Trying to read large file (> 2 GiB) without large file support
Tämä johtuu siitä, että tavalliset zip-työkalut käyttävät pääasiassa lseek
toiminto , jotta tiedoston siirtymä asetetaan lukemaan sen keskihakemistotietueen loppu . Se sijaitsee arkistorakenteen lopussa ja sitä vaaditaan lukemaan luettelo tiedostoista (katso: Zip-tiedostomuodorakenne ). Siksi tiedosto ei voi olla FIFO, putki, päätelaite tai muu dynaaminen, koska syöttöobjektia ei voida sijoittaa funktiolla lseek
.
Joten sinulla on seuraavat kiertotavat:
- käytä erilaista pakkausta (esim.
tar.gz
), - sinun on käytettävä kahta erillistä komentoa,
- käytä vaihtoehtoisia työkaluja (kuten muissa vastauksissa ehdotetaan),
- luo aliaksia tai toimintoja useiden komentojen käyttämiseen.
kommentit
- Mielestäni se voi silti olla FIFO. ’ Sinun on vain jatkettava lukemista FIFO: sta EOF: ään (koko FIFOn puskurointi käytännössä muistissa tai väliaikaisessa tiedostossa). Täysin toteutettavissa komentosarjojen luomisen helpottamiseksi, mutta ei kovin hyödyllinen.
Vastaa
Jos tiedostossa on vain yksi tiedosto zip, voit käyttää zcat
tai gunzip
:
wget -qO- http://www.vim.org/scripts/download_script.php?src_id=11834 | gunzip
FYI: Tässä ovat määritelmät järjestelmästäni gunzip
ja zcat
:
$ grep ^exec $(which gunzip zcat) /bin/gunzip:exec gzip -d "$@" /bin/zcat:exec gzip -cd "$@"
vastaus
zip
-arkisto ei ole peräkkäinen, koska siinä on usein sisällysluettelo tiedoston lopussa, joten sen purkaminen ja purkaminen on vaikeaa.
Vaihtoehtoinen ratkaisu on selvittää, saatko toisen tiedostomuodon, kuten .tar.gz
.
Jos esimerkiksi lataat .zip
-tiedoston GitHubista, siellä on melkein aina .tar.gz
versio saatavilla.
Esimerkiksi
- https://github.com/madler/zlib/archive/v1.2.11.zip
- https://github.com/madler/zlib/archive/v1.2.11.tar.gz
- https://github.com/curl/curl/archive/curl-7_68_0.zip
- https://github.com/curl/curl/archive/curl-7_68_0.tar.gz
Huomaa malli – korvaa vain .zip
sanalla .tar.gz
ja putki kohtaan | tar xzf -
Vastaa
Tämä toimii minulle melko hyvin:
tar xvf <(curl -sL http://www.vim.org/scripts/download_script.php?src_id=11834) jar xvf <(curl -sL http://www.vim.org/scripts/download_script.php?src_id=11834) wget -qO- http://www.vim.org/scripts/download_script.php?src_id=11834 | tar xvf - wget -qO- http://www.vim.org/scripts/download_script.php?src_id=11834 | jar xvf -