まず特定の問題: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 thread からの解決策を見つけました。
gunzip -c
はMac OS Xではエラーなしでzcat
と同様に機能します。
$ gunzip -c 20150707_backup.sql.gz | mysql -u mysql_user -p
GNU utils for Mac OS X、例えばusing homebrew (run brew install coreutils gnu-sed
、gzcat
などをインストールします。およびgsed
)。これにより、各コマンドのGNU実装が提供されます。
次に、作業を簡単にするために、各コマンドの変数を作成します(例:sed=gsed
、および$sed
続いて)、または単にエイリアスを付けます(例:alias sed=gsed
)あなたが書くどんなスクリプトでも。私はあなたの便宜のためにこれに要旨を書きました: gnu-tools-for-mac.sh 。このコードをスクリプトの上に配置(または組み込み)します。
アーカイブの圧縮と抽出の両方にGNU実装を使用します。OSXとGNU実装の使用を混在させることはできないと思います。
私はこれを試してみて、とても面白いものを見つけました! gz
ファイルの場合、Mac OSでgzcat
を実行することが想定されています。
gzcat /path/to/file.gz
を使用してください。zcat /path/to/file.gz
を使用すると、エラーが発生します。zcat
にパイプすると、動作します。cat /path/to/file.gz | zcat
は機能します。これが役に立てば幸いです!
Mac OS Xバージョンのgzip(1)
Zipファイルの読み取りをサポートしていません 。 manページから:
このバージョンのgzipは、
compress(1)
またはbzip2(1)
を使用して圧縮されたファイルを解凍することもできます。
gunzip
は現在、gzip
、Zip
、compress
、compress -H
またはpack
によって作成されたファイルを解凍できます。
サードパーティは、GNU Mac OS X用のgzipをパッケージ化しています。これらはWeb検索で見つけることができます。おそらく、最も抵抗の少ない方法です。
おかしい、bash
- script、bash somescript.sh
を実行するときに同じ問題が発生しました。これは、内部でgzcat
を使用してforループを実行しました。しかし、これらを試してみるinsidesomescript.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
内の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
。
... within my somescript.sh
- script。
多分それは誰かにとって便利です。
ベスト、
サンダー