Сначала конкретная проблема: в linux я использую zcat для отображения файла .zip. В osx zcat, кажется, автоматически добавляет .Z к имени файла. Различные люди предлагают заменить zcat на gzcat; однако, gzcat жалуется, что файл не в формате gzip!
'file' показывает это: ... Zip архив данных, по крайней мере v2.0 для извлечения
Так что ни zcat, ни gzcat не будут работать в osx, что мне делать?
У меня есть скрипт среднего размера в bash, который использует zcat / gzcat, sed awk и другие базовые утилиты для обработки ряда файлов. Я хотел бы продублировать эту среду на моем ноутбуке osx, чтобы я мог работать в автономном режиме. Какие-нибудь общие предложения, как мне избежать такой боли? Я ожидаю, что это довольно обычный рабочий процесс, так что, должно быть, разобрались с другими.
zip
чтобы иметь дело с почтовыми файлами, неgzip
.Ответы:
Ты прав. Это раздражающее поведение.
Попробуй это:
источник
zcat
будет читать.zip
и.Z
файлы. Проблема здесь не в том, что stdin vs named file, а в том, что сопровождающие Linux программ изменяютсяgzcat
для чтения большого числа несвязанных типов файлов.|
дляcat < foo.txt.gz | wc
Я знаю, что это старый вопрос. Тем не менее, я нашел решение из еще более старой ветки github .
Вы можете просто использовать
gunzip -c
то, что работаетzcat
без ошибок в Mac OS X.источник
Вы можете установить утилиты GNU для Mac OS X, например, используя homebrew (запустите
brew install coreutils gnu-sed
, который установитgzcat
и т. Д. Иgsed
). Это предоставит вам реализацию GNU каждой команды.Затем, чтобы упростить вашу жизнь, создайте переменную для каждой команды (например
sed=gsed
, и используйте ее$sed
впоследствии) или просто назовите их (напримерalias sed=gsed
) в любом написанном вами сценарии. Для вашего удобства я написал Gist: gnu-tools-for-mac.sh . Поместите (или включите) этот код поверх ваших скриптов.Используйте реализацию GNU для сжатия и извлечения архивов. Я бы сказал, что нельзя смешивать использование реализации OS X и GNU.
источник
/usr/local/opt/coreutils/libexec/gnubin
к своемуPATH
, что сделает их доступными безg
префикса.Я только что попробовал и нашел что-то очень интересное! Для
gz
файлов, мы , как ожидается, работатьgzcat
на Mac OS.Решение 1
gzcat /path/to/file.gz
и это должно работать.zcat /path/to/file.gz
даст вам ошибку.Решение 2
zcat
и он будет работать.cat /path/to/file.gz | zcat
будет работать.Надеюсь, это поможет!
источник
Версия Mac OS X
gzip(1)
не поддерживает чтение zip-файлов . Со страницы руководства:Но версия для Linux (GNU) делает .
Третьи лица упаковали GNU gzip для Mac OS X; Вы можете найти их из веб-поиска. Это, вероятно, путь наименьшего сопротивления.
источник
Забавно, у меня была та же проблема при выполнении
bash
скриптаbash somescript.sh
, который выполнял цикл forgzcat
внутри него. Но пытаться эти вещи внутри вsomescript.sh
-script ...:zcat < file.txt.gz
brew install coreutils
, но, тем не менее, переустановил:brew reinstall coreutils
gunzip -c file.txt.gz
... ничего не значило ...
Но я также использовал ссылку на каталог:
SOMEDIR="~/DIR1/DIR2/DATA"
Который интерпретируется как
~/DIR1/DIR2/DATA
и, очевидно, не работает внутриbash
скрипта -scriptmacOS
. Это сработало:SOMEDIR="${HOME}/DIR1/DIR2/DATA"
Который интерпретируется как
/Users/someuser/DIR1/DIR2/DATA
. Я не знаю почему - я не эксперт macOS-BASH-techie - но это работало в сочетании с моим оригинальным кодом ...gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt
,... в моем
somescript.sh
сценарии.Может быть, это кому-то пригодится.
Лучший,
шлифовальная машинка
источник