Назад | Перейти на главную страницу

zcat / gzcat работает в Linux, а не в OSX. общая совместимость linux / osx

Сначала конкретная проблема: в 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.

Решение 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-файлов. На странице руководства:

Эта версия gzip также может распаковывать файлы, сжатые с помощью compress(1) или bzip2(1).

Но версия для Linux (GNU).

gunzip в настоящее время может распаковывать файлы, созданные gzip, zip, compress, compress -H или pack.

Третьи стороны упаковали GNU gzip для Mac OS X; вы можете найти их в Интернете. Вероятно, это путь наименьшего сопротивления.

Забавно, у меня была такая же проблема при выполнении bash-скрипт, bash somescript.sh, который выполнил цикл for с gzcat внутри него. Но пробовать эти вещи внутри в somescript.sh-скрипт ...:

  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-BASH-techie - но он работал в сочетании с моим исходным кодом ...

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

... в пределах мой somescript.sh-скрипт.

Может кому пригодится.

Лучший,

шлифовальный