Pertama masalah spesifik: Di linux, saya menggunakan zcat untuk mendaftar file .zip. Di osx, zcat tampaknya secara otomatis menambahkan .Z ke nama file. Berbagai orang menyarankan mengganti zcat dengan gzcat; namun, gzcat mengeluh bahwa file tersebut tidak dalam format gzip!
'file' menunjukkan ini: ... Zip arsip data, setidaknya v2.0 untuk diekstraksi
Jadi, baik zcat atau gzcat tidak akan berfungsi di osx, apa yang bisa saya lakukan?
Saya memiliki skrip berukuran sedang di dalam bash yang menggunakan, zcat / gzcat, sed awk dan utilitas dasar lainnya untuk memproses sejumlah file. Saya ingin menduplikasi lingkungan itu di laptop osx saya sehingga saya dapat bekerja offline. Adakah saran umum bagaimana saya dapat menghindari rasa sakit seperti itu? Saya berharap ini adalah alur kerja yang cukup rutin sehingga harus diselesaikan oleh orang lain.
zip
untuk menangani file zip, bukangzip
.Jawaban:
Kamu benar. Itu perilaku yang menjengkelkan.
Coba ini:
sumber
zcat
akan membaca.zip
dan.Z
mengarsipkan. Masalahnya di sini bukan salah satu dari file stdin vs bernama, itu adalah pengelola Linux dari program yang dimodifikasigzcat
untuk membaca sejumlah besar jenis file yang tidak terkait.|
untuk menyalurkan ke proses lain:cat < foo.txt.gz | wc
Saya tahu ini adalah pertanyaan lama. Namun, saya menemukan solusi dari utas github yang bahkan lebih tua .
Anda cukup menggunakan
gunzip -c
yang berfungsi serupa denganzcat
tanpa kesalahan pada Mac OS X.sumber
Anda dapat menginstal utils GNU untuk Mac OS X, misalnya, menggunakan homebrew (run
brew install coreutils gnu-sed
, yang menginstalgzcat
et al. Dangsed
). Ini akan memberi Anda implementasi GNU dari setiap perintah.Kemudian, untuk membuat hidup Anda lebih mudah, buat variabel untuk setiap perintah (misalnya
sed=gsed
, dan gunakan$sed
selanjutnya), atau cukup beri nama (misalnyaalias sed=gsed
) dalam skrip apa pun yang Anda tulis. Saya telah menulis inti tentang ini untuk kenyamanan Anda: gnu-tools-for-mac.sh . Letakkan (atau sertakan) kode ini di atas skrip Anda.Gunakan implementasi GNU untuk mengompresi dan mengekstraksi arsip. Saya akan mengatakan Anda tidak dapat mencampur penggunaan OS X dan implementasi GNU.
sumber
/usr/local/opt/coreutils/libexec/gnubin
ke AndaPATH
, yang akan membuatnya tersedia tanpag
awalan.Saya baru saja mencoba ini dan menemukan sesuatu yang sangat menarik! Untuk
gz
file, kita diharapkan berjalangzcat
di Mac OS.Solusi 1
gzcat /path/to/file.gz
dan itu harus bekerja.zcat /path/to/file.gz
akan memberi Anda kesalahan.Solusi 2
zcat
dan itu akan berhasil.cat /path/to/file.gz | zcat
akan bekerja.Saya harap ini membantu!
sumber
Versi Mac OS X
gzip(1)
tidak mendukung membaca file zip . Dari halaman manual:Tetapi versi Linux (GNU) tidak .
Pihak ketiga telah memaket GNU gzip untuk Mac OS X; Anda dapat menemukannya dari pencarian web. Itu mungkin jalan paling sedikit perlawanan.
sumber
Lucu, saya punya masalah yang sama ketika mengeksekusi
bash
-scriptbash somescript.sh
,, yang mengeksekusi for-loop dengangzcat
di dalamnya. Tetapi mencoba hal-hal ini di dalamsomescript.sh
-script ...:zcat < file.txt.gz
brew install coreutils
, tetapi tetap menginstal ulang:brew reinstall coreutils
gunzip -c file.txt.gz
... sama sekali tidak ada ...
Tapi saya juga menggunakan referensi ke direktori:
SOMEDIR="~/DIR1/DIR2/DATA"
Yang ditafsirkan sebagai
~/DIR1/DIR2/DATA
dan tampaknya tidak bekerja di dalambash
-script dalammacOS
. Ini berhasil:SOMEDIR="${HOME}/DIR1/DIR2/DATA"
Yang diartikan sebagai
/Users/someuser/DIR1/DIR2/DATA
. Saya tidak tahu mengapa - saya bukan ahli macOS-BASH-techie - tetapi bekerja bersama dengan kode asli saya ...gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt
.... dalam
somescript.sh
skrip saya .Mungkin bermanfaat bagi seseorang.
Terbaik,
Sander
sumber