zcat / gzcat, linux में काम करता है, osx पर नहीं सामान्य linux / osx संगतता


50

पहली विशिष्ट समस्या: लिनक्स में, मैं .zip फ़ाइल को सूचीबद्ध करने के लिए zcat का उपयोग करता हूं। Osx में, zcat स्वचालित रूप से .Z को फ़ाइल नाम में जोड़ता है। विभिन्न लोग गज़क के साथ ज़कात बदलने का सुझाव देते हैं; हालाँकि, gzcat को शिकायत है कि फ़ाइल gzip प्रारूप में नहीं है!

'फ़ाइल' यह दिखाता है: ... ज़िप संग्रह डेटा, निकालने के लिए कम से कम v2.0

तो न तो zcat या gzcat osx में काम करेगा, मैं क्या कर सकता हूं?

मेरे पास bash में एक मध्यम आकार की स्क्रिप्ट है जो कई फाइलों को प्रोसेस करने के लिए zcat / gzcat, sed awk और अन्य बुनियादी उपयोगिताओं का उपयोग करता है। मैं अपने ओएसएक्स लैपटॉप पर उस वातावरण की नकल करना चाहूंगा ताकि मैं ऑफ़लाइन काम कर सकूं। कोई भी सामान्य सुझाव कि मैं इस तरह के दर्द से कैसे बच सकता हूं? मुझे उम्मीद है कि यह एक काफी नियमित वर्कफ़्लो है इसलिए इसे दूसरों द्वारा हल किया जाना चाहिए।


2
यदि यह ज़िप संग्रह डेटा है, तो यह gzip प्रारूप में नहीं है!
माइकल हैम्पटन

@ मिचेल हैम्पटन मैं लिनक्स ठीक कर सकते हैं। Osx पर न तो zcat और न ही gzcat काम करता है। तो मैं इसे कैसे हल कर सकता हूं? क्या उपयोगिताओं का एक और सेट है जिसे मैं स्थापित कर सकता हूं जो लिनक्स के साथ-साथ ओएक्सएक्स दोनों पर काम करेगा? ये स्क्रिप्ट मेरी अपनी हैं इसलिए मैं उन्हें बदल सकता हूं (हालांकि मैं उन्हें सरल रखना चाहूंगा)। मैं दोनों linux / osx वातावरण को नियंत्रित करता हूं और साथ ही मैं दोनों पर सरल इंस्टाल भी कर सकता हूं।
user23398

मैं यह नहीं कहूंगा कि यह नियमित है। मैं आम तौर पर zipज़िप फ़ाइलों से निपटने के लिए उपयोग करता हूं , नहीं gzip
माइकल हैम्पटन

जवाबों:


89

तुम सही हो। यह कष्टप्रद व्यवहार है।

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

इसे इस्तेमाल करे:

$ zcat < foo.txt.gz 
asdfadsf

2
यह OS X पर ठीक काम करता है।
Valerio Schiavoni

1
जाहिरा तौर पर मेरा जवाब गलत है। लिनक्स zcatपढ़ेगा .zipऔर .Zफाइलें। यहाँ समस्या स्टड बनाम नामित फ़ाइल में से एक नहीं है, यह है कि लिनक्स प्रोग्रामर gzcatबड़ी संख्या में असंबद्ध फ़ाइल प्रकारों को पढ़ने के लिए संशोधित होते हैं।
vy32

हम इसे दूसरी प्रक्रिया में कैसे पाइप करेंगे?
पेटा

|किसी अन्य प्रक्रिया में पाइप का उपयोग करें :cat < foo.txt.gz | wc
vy32

यह आपकी समस्या को ठीक कर देगा, कम से कम OSX
jimh

18

मैं जानता हूं कि यह एक पुराना सवाल है। हालाँकि, मुझे एक पुराने गिथब थ्रेड से एक समाधान मिला ।

आप मैक ओएस एक्स पर त्रुटियों के बिना gunzip -cसमान रूप से काम कर सकते zcatहैं।

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

13

आप मैक ओएस एक्स के लिए जीएनयू बर्तनों को स्थापित कर सकते हैं, उदाहरण के लिए, होमब्रे (रन brew install coreutils gnu-sed, जो gzcatएट अल। और gsed) स्थापित करता है । यह आपको प्रत्येक आदेश के GNU कार्यान्वयन के साथ प्रदान करेगा।

फिर, अपने जीवन को आसान बनाने के लिए, प्रत्येक कमांड के लिए एक चर बनाएं (उदाहरण के लिए sed=gsed, और $sedबाद में उपयोग करें ), या बस उन्हें alias sed=gsedकिसी भी स्क्रिप्ट में लिखें (जैसे )। मैंने आपकी सुविधा के लिए इस पर एक Gist लिखा है: gnu-tools-for-mac.sh । इस कोड को अपनी स्क्रिप्ट के ऊपर रखें (या शामिल करें)।

अभिलेखागार को संपीड़ित करने और निकालने दोनों के लिए जीएनयू कार्यान्वयन का उपयोग करें। मैं कहता हूँ कि आप OS X और GNU कार्यान्वयन के उपयोग को नहीं मिला सकते हैं।


3
आप वैकल्पिक रूप /usr/local/opt/coreutils/libexec/gnubinसे अपने को जोड़ सकते हैं PATH, जो उन्हें gउपसर्ग के बिना उपलब्ध कराएगा।
17

3

मैंने बस यह कोशिश की और कुछ बहुत दिलचस्प पाया! के लिए gzफ़ाइलें, हम चलाने के लिए उम्मीद कर रहे हैं gzcatमैक ओएस पर।

समाधान 1

  • का उपयोग करें gzcat /path/to/file.gzऔर यह काम करना चाहिए।
  • उपयोग करने zcat /path/to/file.gzसे आपको एक त्रुटि मिलेगी।

समाधान २

  • फ़ाइल में पाइप zcatऔर यह काम करेगा।
  • उदाहरण के लिए, cat /path/to/file.gz | zcatकाम करेंगे।

आशा है कि ये आपकी मदद करेगा!


0

मैक ओएस एक्स संस्करण gzip(1) ज़िप फ़ाइलों को पढ़ने का समर्थन नहीं करता है । आदमी पृष्ठ से:

Gzip का यह संस्करण उन फ़ाइलों को डिकम्प्रेस करने में सक्षम है, जिनका उपयोग करके compress(1)या संपीड़ित फ़ाइलों को संकुचित किया जा सकता है bzip2(1)

लेकिन लिनक्स (GNU) संस्करण है

gunzipवर्तमान में द्वारा बनाई गई फ़ाइलों को संपीड़ित कर सकते हैं gzip, zip, compress, compress -Hया pack

तृतीय पक्षों ने मैक ओएस एक्स के लिए जीएनयू गज़िप पैक किया है; आप इन्हें वेब खोज से पा सकते हैं। वह शायद कम से कम प्रतिरोध का रास्ता है।


वेब पर खोज करना और नए सॉफ़्टवेयर को स्थापित करना कभी भी कम से कम प्रतिरोध का मार्ग नहीं है।
vy32

0

अजीब बात है, मेरे पास एक bash-स्क्रिप्ट को निष्पादित करते समय एक ही मुद्दा था bash somescript.sh, जिसने gzcatइसके साथ एक फॉर-लूप निष्पादित किया था। लेकिन इन बातों की कोशिश कर अंदरsomescript.sh -script ...:

  1. zcat < file.txt.gz
  2. मैंने brew install coreutilsपहले से ही स्थापित किया था , लेकिन फिर भी, फिर से स्थापित:brew reinstall coreutils
  3. gunzip -c file.txt.gz

... कुछ भी नहीं ...

लेकिन मैंने एक निर्देशिका के संदर्भ का भी उपयोग किया:

SOMEDIR="~/DIR1/DIR2/DATA"

जिसकी व्याख्या की जाती है ~/DIR1/DIR2/DATAऔर जाहिरा तौर पर bash-स्क्रिप्ट के भीतर काम नहीं करता है macOS। यह काम किया:

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

जिसकी व्याख्या की जाती है /Users/someuser/DIR1/DIR2/DATA। मुझे पता नहीं क्यों - मैं एक विशेषज्ञ macOS- बैश-तकनीकी नहीं हूँ - लेकिन यह मेरे मूल कोड के साथ मिलकर काम करता है ...

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

... मेरी -सीस्क्रिप्ट के भीतरsomescript.sh

शायद यह किसी के लिए उपयोगी है।

श्रेष्ठ,

Sander

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.