zipコマンドでWordファイルとかExcelファイルとかと、他のいくつかのファイルを圧縮しようと思ったら、なぜかWordファイルがぶっ壊れて開けなくなって変な汗出てるみなさん、ようこそいらっしゃいました。まずは深呼吸して落ち着きましょう。
これからあなたがやってしまったことをズバリ当てましょう。たとえばreport.wordとtable.xlsxファイルをzipで固めてarchive.zipにしようと思っていたとして、こんなふうに指定しましたね?
% zip report.docx table.xlsx archive.zip zip warning: name not matched: archive.zip adding: table.xlsx (deflated 29%)
すると、Wordファイルを開こうとしてもこんなエラーメッセージや、
こんなメッセージがでて、
Wordファイルが開けなくなりましたね。(エラーメッセージは日本語かもしれません)
原因はzipコマンドに指定する引数の順番が意図と異なり、report.docxというzipファイルにtable.xlsxとarchive.zipを入れろという意味になっていたからです。正しいzipコマンドの使い方は別途ググってもらうとして、まずは直し方を。macでの話ですが、Linuxでも同じことが言えると思います。
なにが起こっているかというと、実はWordのdocxファイルはzipファイルで、そのzipファイルにtable.xlsxが取り込まれた状態になっています。重要なことなので強調しておきます。Wordのdocxファイルの実態はzipファイルです。では、開けなくなってしまったreport.docxの中身をzipinfoコマンドで覗いてみましょう。
% zipinfo report.docx Archive: report.docx Zip file size: 18339 bytes, number of entries: 12 -rw---- 4.5 fat 1312 b- defS 80-Jan-01 00:00 [Content_Types].xml -rw---- 4.5 fat 590 b- defS 80-Jan-01 00:00 _rels/.rels -rw---- 4.5 fat 817 b- defS 80-Jan-01 00:00 word/_rels/document.xml.rels -rw---- 4.5 fat 2924 b- defS 80-Jan-01 00:00 word/document.xml -rw---- 4.5 fat 8393 b- defS 80-Jan-01 00:00 word/theme/theme1.xml -rw---- 4.5 fat 3192 b- defS 80-Jan-01 00:00 word/settings.xml -rw---- 4.5 fat 755 b- defS 80-Jan-01 00:00 docProps/core.xml -rw---- 4.5 fat 2272 b- defS 80-Jan-01 00:00 word/fontTable.xml -rw---- 4.5 fat 894 b- defS 80-Jan-01 00:00 word/webSettings.xml -rw---- 4.5 fat 29453 b- defS 80-Jan-01 00:00 word/styles.xml -rw---- 4.5 fat 709 b- defS 80-Jan-01 00:00 docProps/app.xml -rw-r--r-- 3.0 unx 8345 bx defN 22-Oct-18 08:50 table.xlsx 12 files, 59656 bytes uncompressed, 15103 bytes compressed: 74.7%
report.docxの中にtable.xlsxファイルが取り込まれているのがわかります。この取り込まれたファイルを削除してやりましょう。zipコマンドの-dオプションでtable.xlsxファイルをアーカイブから取り除きます。なお、この操作を間違うといよいよ完全にWordファイルを壊してしまうので、事前にコピーを取っておくことをおすすめします。
% zip -d report.docx table.xlsx deleting: table.xlsx
これで開けるようになったはずです。それではよい午後を。