Сначала конкретная проблема: в Linux я использую zcat для вывода списка файлов .zip. В osx zcat автоматически добавляет .Z к имени файла. Различные люди предлагают заменить zcat на gzcat; однако gzcat жалуется, что файл не в формате gzip!
'file' показывает следующее: ... Данные архива Zip, по крайней мере v2.0 для извлечения
Так что ни zcat, ни gzcat не будут работать в osx, что мне делать?
У меня есть сценарий среднего размера в bash, который использует zcat / gzcat, sed awk и другие базовые утилиты для обработки ряда файлов. Я хотел бы продублировать эту среду на своем ноутбуке с osx, чтобы я мог работать в автономном режиме. Какие-нибудь общие предложения, как я могу избежать такой боли? Я полагаю, что это довольно обычный рабочий процесс, поэтому другие должны были разобраться с ним.
Ты прав. Это раздражающее поведение.
$ 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
Я знаю, что это старый вопрос. Однако я нашел решение от еще более старого поток github.
Вы можете просто использовать gunzip -c
это работает аналогично zcat
без ошибок в Mac OS X.
$ gunzip -c 20150707_backup.sql.gz | mysql -u mysql_user -p
Вы можете установить утилиты GNU для Mac OS X, например, используя домашнее пиво (бегать brew install coreutils gnu-sed
, который устанавливает gzcat
и другие. и gsed
). Это предоставит вам реализацию каждой команды GNU.
Затем, чтобы облегчить себе жизнь, сделайте переменную для каждой команды (например, sed=gsed
, и используйте $sed
впоследствии) или просто присвоить им псевдоним (например, alias sed=gsed
) в любом написанном вами скрипте. Я написал об этом для вашего удобства: gnu-tools-for-mac.sh. Поместите (или включите) этот код поверх своих скриптов.
Используйте реализацию GNU как для сжатия, так и для распаковки архивов. Я бы сказал, вы не можете смешивать использование OS X и реализации GNU.
Я просто попробовал и нашел кое-что очень интересное! Для gz
файлы, мы должны запустить gzcat
в Mac OS.
gzcat /path/to/file.gz
и он должен работать.zcat /path/to/file.gz
выдаст вам ошибку.zcat
и это будет работать.cat /path/to/file.gz | zcat
буду работать.Надеюсь, это поможет!
Версия Mac OS X gzip(1)
не поддерживает чтение zip-файлов. На странице руководства:
Эта версия gzip также может распаковывать файлы, сжатые с помощью
compress(1)
илиbzip2(1)
.
gunzip
в настоящее время может распаковывать файлы, созданныеgzip
,zip
,compress
,compress -H
илиpack
.
Третьи стороны упаковали GNU gzip для Mac OS X; вы можете найти их в Интернете. Вероятно, это путь наименьшего сопротивления.
Забавно, у меня была такая же проблема при выполнении bash
-скрипт, bash somescript.sh
, который выполнил цикл for с gzcat
внутри него. Но пробовать эти вещи внутри в somescript.sh
-скрипт ...:
zcat < file.txt.gz
brew install coreutils
уже, но, тем не менее, переустановлено: brew reinstall coreutils
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-BASH-techie - но он работал в сочетании с моим исходным кодом ...
gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt
.
... в пределах мой somescript.sh
-скрипт.
Может кому пригодится.
Лучший,
шлифовальный