Najpierw konkretny problem: w systemie Linux używam zcat do wyświetlenia pliku .zip. W OSX wydaje się, że zcat automatycznie dołącza .Z do nazwy pliku. Różne osoby sugerują zamianę zcat na gzcat; Jednak gzcat skarży się, że plik nie jest w formacie gzip!
„plik” pokazuje to: ... Zarchiwizuj dane archiwalne, co najmniej v2.0 do wyodrębnienia
Więc ani Zcat, ani gzcat nie będą działać w systemie OSX, co mogę zrobić?
Mam średniej wielkości skrypt w bash, który używa, zcat / gzcat, sed awk i innych podstawowych narzędzi do przetwarzania wielu plików. Chciałbym zduplikować to środowisko na moim laptopie osx, aby móc pracować w trybie offline. Jakieś ogólne sugestie, jak mogę uniknąć takiego bólu? Oczekuję, że jest to dość rutynowy przepływ pracy, więc inni musieli rozwiązać ten problem.
zip
do obsługi plików zip, a niegzip
.Odpowiedzi:
Masz rację. To irytujące zachowanie.
Spróbuj tego:
źródło
zcat
będzie czytał.zip
i.Z
zapisywał pliki. Nie chodzi tu o plik stdin vs. nazwany, lecz o to, że opiekunowie programów w Linuksie zmodyfikowali tak,gzcat
aby czytali dużą liczbę niepowiązanych typów plików.|
do potoku do innego procesu:cat < foo.txt.gz | wc
Wiem, że to stare pytanie. Znalazłem jednak rozwiązanie z jeszcze starszego wątku github .
Możesz po prostu użyć
gunzip -c
tego, który działa podobnie jakzcat
bez błędów w Mac OS X.źródło
Możesz zainstalować narzędzia GNU dla Mac OS X, np. Używając homebrew (uruchom
brew install coreutils gnu-sed
, który instalujegzcat
i wsp. Orazgsed
). Zapewni to implementację GNU każdej komendy.Następnie, aby ułatwić sobie życie, utwórz zmienną dla każdego polecenia (np.
sed=gsed
I użyj go$sed
później) lub po prostu alias (np.alias sed=gsed
) W dowolnym skrypcie, który piszesz. Dla twojej wygody napisałem Gist: gnu-tools-for-mac.sh . Umieść (lub dołącz) ten kod na swoich skryptach.Użyj implementacji GNU do kompresji i rozpakowywania archiwów. Powiedziałbym, że nie można łączyć zastosowań implementacji OS X i GNU.
źródło
/usr/local/opt/coreutils/libexec/gnubin
do swojegoPATH
, który udostępni je bezg
prefiksu.Właśnie spróbowałem i znalazłem coś bardzo interesującego! W przypadku
gz
plików oczekuje się, że będziemy działaćgzcat
w systemie Mac OS.Rozwiązanie 1
gzcat /path/to/file.gz
i powinno działać.zcat /path/to/file.gz
spowoduje błąd.Rozwiązanie 2
zcat
i będzie działać.cat /path/to/file.gz | zcat
będzie działać.Mam nadzieję, że to pomoże!
źródło
Wersja Mac OS X
gzip(1)
nie obsługuje odczytu plików zip . Ze strony podręcznika:Ale wersja Linux (GNU) tak .
Firmy trzecie spakowały GNU gzip dla Mac OS X; możesz je znaleźć w wyszukiwarce internetowej. To prawdopodobnie ścieżka najmniejszego oporu.
źródło
Zabawne, miałem ten sam problem podczas wykonywania
bash
skryptubash somescript.sh
, który wykonywał pętlę forgzcat
wewnątrz. Ale próbuje te rzeczy wewnątrz tejsomescript.sh
-script ...:zcat < file.txt.gz
brew install coreutils
już, ale mimo to ponownie zainstalowałem:brew reinstall coreutils
gunzip -c file.txt.gz
... nic nie znaczyło ...
Ale użyłem również odniesienia do katalogu:
SOMEDIR="~/DIR1/DIR2/DATA"
Który jest interpretowany jako
~/DIR1/DIR2/DATA
i najwyraźniej nie działa w ramachbash
-script wewnątrzmacOS
. To działało:SOMEDIR="${HOME}/DIR1/DIR2/DATA"
Co jest interpretowane jako
/Users/someuser/DIR1/DIR2/DATA
. Nie wiem dlaczego - nie jestem ekspertem od technologii macOS-BASH - ale działało to w połączeniu z moim oryginalnym kodem ...gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt
.... w moim
somescript.sh
skrypcie.Może komuś się przyda.
Najlepsza,
Szlifierka
źródło