【Mac】ファイルの順番を維持した zip を作る
hetima.com さんが公開されている、zip の内容を表示してくれる Quicklook プラグインを利用させてもらっている。
🔗 Releases · hetima/HetimaZip-qlgenerator · GitHub
しかし最近、その表示がおかしくなってきた。これは HetimaZip のせいではなく、zip 圧縮のときファイル順がおかしくなっているのが原因らしい。
zip コマンドはファイルの順番がおかしい
以下のようなファイルを内包する「images」というフォルダを zip ファイルにしてみる。
最初の、コーヒーの画像が qlimage としてアイコンにプレビューされて欲しいのだが。
このような zip ファイルが作成される。
三番目の黄色い花の画像が一番上にきているのだ。
zip コマンドのログを見ると、なぜか 3、2、1 の順番でファイルにしている。にゃんで?
zip -r ~/Desktop/images.zip ~/Desktop/images
adding: Users/user/Desktop/images/ (stored 0%)
adding: Users/user/Desktop/images/03_image.jpg (deflated 6%)
adding: Users/user/Desktop/images/02_image.jpg (deflated 4%)
adding: Users/user/Desktop/images/01_image.jpg (deflated 5%)
ls の結果を zip に渡す
原因についてはよくわからない。なんか、順番にこだわらずに圧縮したほうが効率がいいのだろう。
これをファイル順通りに圧縮するには、ls で表示したものを zip コマンドへ渡すというやり方が有用みたいだ。
ls -1 パス/ディレクトリ名 | zip -r -@ パス/圧縮ファイル名.zip
2020.2.26 追記
これ間違いでした。ls にパスを渡すんじゃなく、cd で目的のディレクトリにいってから ls をしないと駄目みたいです。なので正確には、
cd パス/ディレクトリ
ls -1 | zip -r -@ パス/圧縮ファイル名.zip
が、正しいです。追記ここまで。
ls のオプション「-1」は数字の 1 だ。
このオプションで、ファイルやディレクトリを一行ずつ出力してくれる。
$ ls
01_image.jpg 02_image.jpg 03_image.jpg
$ ls -1
01_image.jpg
02_image.jpg
03_image.jpg
zip コマンドの「-@」をつけると、ls の結果の順番通りに圧縮してくれる。
~$ cd Desktop/images
~/Desktop/images $ ls -1 | zip -r -@ ../images02.zip
adding: 01_image.jpg (deflated 5%)
adding: 02_image.jpg (deflated 4%)
adding: 03_image.jpg (deflated 6%)
想定通りコーヒーの画像がプレビューされて、とても満足。
この方法は、下記サイトさまで教えてもらいました。
最近のコメント