zcat / gzcat, osx üzerinde değil linux'da çalışır. genel linux / osx uyumluluğu


50

İlk olarak spesifik sorun: Linux'ta, bir .zip dosyasını listelemek için zcat kullanıyorum. Osx'ta, zcat otomatik olarak .Z dosyasını dosya adına ekledi gibi görünüyor. Çeşitli insanlar, zcat'ın gzcat ile değiştirilmesini önermektedir; Ancak, gzcat, dosyanın gzip biçiminde olmadığından şikayet eder!

'file' bunu gösterir: ... Zip arşivi verisi, çıkartmak için en az v2.0

Peki, ne zcat ne de gzcat osx'ta işe yaramaz, ne yapabilirim?

Ben bash içinde zcat / gzcat, sed awk ve bir takım dosyaları işlemek için diğer temel programları kullanan orta büyüklükte bir komut dosyası var. Osx dizüstü bilgisayarıma o ortamı kopyalamak istiyorum, böylece çevrimdışı çalışabiliyorum. Herhangi bir genel önerim, böyle bir acıyı nasıl önleyebilirim? Bunun oldukça rutin bir iş akışı olduğunu düşünüyorum, bu nedenle başkaları tarafından çözülmüş olması gerekir.


2
Zip arşivi verileri ise, gzip biçiminde değildir !
Michael Hampton

@ MichaelHampton Ben linux iyi zcat olabilir. Ne zcat ne de gzcat osx üzerinde çalışır. Peki bunu nasıl çözebilirim? Hem linux hem de osx üzerinde çalışacak yükleyebileceğim başka bir yardımcı program var mı? Bu senaryolar benimdir, bu yüzden onları değiştirebilirim (basit olmasına rağmen). Her iki linux / osx ortamını da kontrol ediyorum, böylece her ikisine de basit kurulumlar yapabiliyorum.
user23398 3

Bunun rutin olduğunu söyleyemem. Genelde zipzip dosyaları ile uğraşmak için kullanırım gzip.
Michael Hampton

Yanıtlar:


89

Haklısın. Bu can sıkıcı bir davranış.

$ zcat foo.txt.gz 
zcat: can't stat: foo.txt.gz (foo.txt.gz.Z): No such file or directory

Bunu dene:

$ zcat < foo.txt.gz 
asdfadsf

2
Bu, OS X’de işe
Valerio Schiavoni

1
Görünüşe göre cevabım yanlış. Linux zcatokuyacak .zipve .Zdosyalar. Buradaki sorun stdin'e göre adlandırılmış dosyalardan biri değil, programların Linux yöneticilerinin gzcatçok sayıda ilgisiz dosya türünü okuyacak şekilde değiştirilmiş olmalarıdır.
vy32

Bunu başka bir işleme nasıl aktarabiliriz?
Petah

|Başka bir işleme boru bağlamak için kullanın :cat < foo.txt.gz | wc
vy32

Bu, sorununuzu çözecektir, en azından
OSX'de

18

Bunun eski bir soru olduğunu biliyorum. Ancak daha eski bir github ipliğinden bir çözüm buldum .

Mac OS X'teki hatalara gunzip -cbenzer şekilde çalışan işleri kullanabilirsiniz zcat.

$ gunzip -c 20150707_backup.sql.gz | mysql -u mysql_user -p

13

Mac OS X için, örneğin homebrew (run brew install coreutils gnu-sed, install gzcatve ark. gsed) Kullanarak GNU yardımcı programları kurabilirsiniz . Bu size her komutun GNU'sunu uygulayacaktır.

Daha sonra, hayatınızı kolaylaştırmak için yazdığınız herhangi bir komut dosyasında her komut için bir değişken (örneğin sed=gsedkullanın ve $seddaha sonra kullanın ) ya da basitçe bunları adlandırın (örn. alias sed=gsed). Size kolaylık sağlamak için bu konuda bir Gist yazdım: gnu-tools-for-mac.sh . Bu kodu komut dosyalarınızın üzerine koyun (veya ekleyin).

Arşivleri hem sıkıştırmak hem de çıkarmak için GNU uygulamasını kullanın. OS X ve GNU uygulamalarının kullanımlarını karıştıramayacağınızı söyleyebilirim.


3
Sen alternatif olarak ekleyebilirsiniz /usr/local/opt/coreutils/libexec/gnubinadresinden Müşteri PATHolmadan kullanılabilir hale getireceğiz ki, gönek.
bfontaine

3

Ben sadece bunu denedim ve çok ilginç bir şey buldum! İçin gzdosyaları kaçmak biz bekleniyor gzcatMac OS üzerinde.

1. Çözüm

  • Kullanın gzcat /path/to/file.gzve çalışması gerekir.
  • Kullanmak zcat /path/to/file.gzsize bir hata verecektir.

2. Çözüm

  • Boruda dosya zcatve işe yarayacak.
  • Örneğin, cat /path/to/file.gz | zcatçalışacak.

Umarım bu yardımcı olur!


0

Mac OS X sürümü gzip(1) zip dosyalarını okumayı desteklemiyor . Man sayfasından:

Bu gzip sürümü, compress(1)ya da kullanarak sıkıştırılmış dosyaları açabilir bzip2(1).

Ancak Linux (GNU) versiyonu var .

gunzipŞu anda tarafından oluşturulan dosyaları sıkıştırmasını gzip, zip, compress, compress -Hveya pack.

Üçüncü taraflar, Mac OS X için GNU gzip'i paketledi; Bunları bir web aramasından bulabilirsiniz. Muhtemelen en az direnç gösteren yol budur.


Web'de arama yapmak ve yeni yazılım yüklemek hiç bir zaman en az direnç göstermenin yolu değildir.
vy32

0

Komik, içinde bir for-loop uygulayan bir bash-script çalıştırırken de aynı sorunu yaşadım . Ama bunları çalışırken içeride -Script ...:bash somescript.shgzcatsomescript.sh

  1. zcat < file.txt.gz
  2. brew install coreutilsZaten kurdum , ancak yine de yeniden kurdum:brew reinstall coreutils
  3. gunzip -c file.txt.gz

... hiçbir şeye değmedi ...

Ama aynı zamanda bir dizine referans kullandım:

SOMEDIR="~/DIR1/DIR2/DATA"

Olarak yorumlanan ~/DIR1/DIR2/DATAve görünüşe göre içinde bash-script içinde çalışmaz macOS. Bu çalıştı:

SOMEDIR="${HOME}/DIR1/DIR2/DATA"

Olarak yorumlanır /Users/someuser/DIR1/DIR2/DATA. Nedenini bilmiyorum - Ben uzman bir macOS-BASH teknolojisi uzmanı değilim - ama orijinal kodumla bağlantılı olarak çalıştı ...

gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt.

... içinde benim somescript.sh-Script.

Belki birisi için faydalıdır.

En iyi,

Sander

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.