« DragThingのドックにニュースなどを表示するAppleScript | トップページ | DragThingに日付カウントダウンを表示 »

2007年12月14日 (金)

Windowsで文字化けしないzipを作るAppleScript

ここに書いてあることがすばやく、簡単にできるソフトMacZip4Winがありますので実用にはこちらをお勧めします。

2008/5/19更新

これは何?

Mac OS XからFinderで簡単にzipファイルを作れるようになりました。しかし、保存されるファイル名の文字コードがユニコードらしくてWindowsで解凍すると日本語ファイル名が文字化けしてしまいます。

これを解決する方法がこここれに書いてあって試した所日本語でもちゃんと文字化けしなくて解凍できるzipができました。ただ手順が手作業でやるには面倒なのでこれを自動でやるAppleScriptを作ってみました。

AppleScriptファイル

最新版(2008/05/19)

フォルダを圧縮する場合にフォルダ名によってはエラーになるのを修正。あと、dmgをマウント時にverifyしないようにしたのでちょっと動作が速くなったかも。ファイルが100個ぐらい入ったフォルダを圧縮したらdmgにスペースが足りませんと言われたので、dmgのサイズ計算部分に余裕を今より持たせるようにしました。

「makeSjisZipVer1.1.3.zip」をダウンロード

以下の3つのファイルが入っています

  • Windowsで文字化けしない無圧縮zipを作る.app
  • Windowsで文字化けしないzipを作る.app
  • Windowsで文字化けしないパスワード付きzipを作る.app
過去のファイル
通常版(パスワード無しzipを作る)
パスワードが付けられるバージョン。10.5以降が必要。
パスワードが付けられるバージョン。10.4用。

最初から入ってるzipコマンドではパスワード付きzipが作れないのでZip Tools for Mac OS X 1.1をインストールする必要があります

サンプルzipファイル

スクリーンショット

Finderで表示した元のファイル
View_mac_original
このAppleScriptで圧縮したzipをWindowsで表示した所
View_xp_convmvandzip
Finderで圧縮したzipをWindowsで表示した所
View_xp_finder

説明

使い方は.scptはFinderでzip圧縮したいファイルを選択した状態でスクリプトメニューや各種AppleScriptのランチャーから実行してください。.appはzip圧縮したいファイルをアプリケーションにドラッグドロップしてください。どちらもzipファイルが出来るまでにわりと時間がかかります。できあがったらダイアログが表示されるので気長に待ってください。

10.3ですとditto --norsrcの所でエラーが出ます。--norsrcを削除すると動くようになります。できあがったのはWindowsで文字化けしたとの書き込みを見たので自分も試してみましたが自分は文字化けしなかったです。ただ、USBディスクにテストzipファイルがいっぱいあったので間違ったのを見た可能性もなきにしもあらず…。

このAppleScriptの最重要アイテムのconvmvですがデフォルトではOSに入っていないので別途インストールする必要があります。convmv - convert filenames to utf8 or any other charsetからダウンロードできます。いっぱいありますが一番新しいのでいいと思います。ダウンロードしたものをターミナルを使っていインストールもできるのですが、ターミナルが分からない人向けにconvmvをアプリケーションフォルダにコピーした場合でも動くようにしました。convmvをいろいろ使うならちゃんとインストールした方がいいと思いますが、このAppleScriptでのみ使うならconvmvをアプリケーションフォルダにコピーする方法がお手軽だと思います。下の画像のように置いてあればOKです。

Convmvinappfolder

どんなファイル名でもWindowsで文字化けしないで解凍できるかはわかりませんし、どれぐらいWindowsで問題なく解凍できるものが出来るか分かりませんが、手元にWindows環境が無いけどWindowsで文字化けしないzipを作りたい場合に使えるかもしれません。

|

« DragThingのドックにニュースなどを表示するAppleScript | トップページ | DragThingに日付カウントダウンを表示 »

AppleScript」カテゴリの記事

zip」カテゴリの記事

コメント

頂きました。ありがとうございます。

投稿: | 2007年9月10日 (月) 21時21分

頂きましたっ!
友人がWinなので大助かりです。有難うございました〜!!

投稿: とく坊 | 2007年9月11日 (火) 19時40分

今は手元にMacが無いので推測混じりになりますが、元々CP932の範囲外で変換不能な文字を別にしても、

・ロングファイルネームの使用禁止文字( \ / : * ? " | )
・予約語になっているMS-DOSデバイス名(CON, AUX, NUL, PRN, LPT1 ~ LPT4, COM1 ~ COM4, etc...)
・NTFSのストリーム名表記
・Finder上では / に見える文字が、POSIX標準入出力関数からは : に見える
・最近のMac OS Xは、POSIX標準入出力関数が normalization form insensitive になっていて NFC を NFD に勝手に正規化してしまうので、convmvで変換した後に偶然NFCな濁点文字があった場合に、再度ファイル名を読み取るとNFDに正規化されているかもしれない

等が問題になるかもしれません。

蛇足ですが、大昔にLHaのMac OS X用patch(autoconf版とは別)を書いた人は、展開専用にする事で上記の面倒を避けたために、かなり後までズルいと言われ続けたそうですw

投稿: っき | 2007年9月12日 (水) 17時59分

失礼、コメントからいくつかの文字が抜けてしまったようです。
ロングファイルネームの使用禁止文字に半角の"<"と">"を追加してください。

投稿: っき | 2007年9月12日 (水) 18時11分

>っきさん
試しに「\ / * ? " |」を含んだファイル名のzipを作ってWindowsのエクスプローラーでzip内を表示した所、禁止文字を含んだファイルが表示されませんでした。Lhaplusでは禁止文字を含んだファイル解凍時にエラーになりました。解凍時に気を利かせてリネームしてくれるソフトは無いのかな。
「非互換ネームcheck」というアプリケーションでファイル名にWindows禁止文字が含まれているかチェックできるので安全重視の方は使ってみてはどうでしょうか。

投稿: r | 2007年9月17日 (月) 18時09分

仕事で暗号付きZipが必須のため、このスクリプトを便利に使わせていただいております。

これまでファイル名でのトラブルはないのですが、フォルダごと圧縮する際に、フォルダ名に括弧が入っているとエラーになって圧縮できません。

dittoによる作業用ディスクイメージへのコピーでエラーになっていたので、以下のようにスクリプトを修正して使っております。(dittoコマンド内でフォルダのフルパス名を生成するのではなく、事前に変数に入れておいて"quoted form of"が効くように修正)

(元ソース)
-----------------------------------------------------------
if theAliasPath ends with ":" then
--フォルダ
set theFilePath to POSIX path of theAlias as string
do shell script "ditto --norsrc " & quoted form of theFilePath & " " & quoted form of dmgVolumePath & "/" & theName

--.DS_Store削除 -- ディスクに対してやるとtrashフォルダでエラーが出たので個別にやる

do shell script "cd " & quoted form of dmgVolumePath & "/" & theName & "; find . -name '.DS_Store' -delete"
-----------------------------------------------------------

(修正後)
-----------------------------------------------------------
if theAliasPath ends with ":" then
--フォルダ
set theFilePath to POSIX path of theAlias as string
set theDestFilePath to dmgVolumePath & "/" & theName
do shell script "ditto --norsrc " & quoted form of theFilePath & " " & quoted form of theDestFilePath

--.DS_Store削除 -- ディスクに対してやるとtrashフォルダでエラーが出たので個別にやる
do shell script "cd " & quoted form of theDestFilePath & "; find . -name '.DS_Store' -delete"
-----------------------------------------------------------

AppleScriptをよく知らないため変数をひとつ追加して動くようにしましたが、フルパス名を作る際になにかしらで囲ってやるだけでいけるのかもしれません。お恥ずかしい限りです。

投稿: にしやん | 2008年5月17日 (土) 15時12分

にしやんさん、こんにちは。
確かにフォルダ名によってはエラーが出ますね。
作ったけど全然使ってないので気がつきませんでした…。
自分が直したのも公開しておきました。

投稿: r | 2008年5月20日 (火) 00時03分

「makeSjisZipVer1.1.3.zip」をダウンロードして解凍したところ、
見事に文字化けしてました・・
vistaだからでしょうか??

投稿: vista | 2008年8月12日 (火) 19時22分

それはFinderで圧縮したzipなのでそうなります。
中身もMac用のアプリケーションしか入っていないのでWindowsだと意味が無いと思います。

投稿: r | 2008年8月12日 (火) 21時53分

こんにちは。
convmv ですが、MacPorts にも入っています。

convmv の tarball を展開して make test をすると、UTF8 絡みで fail するので、
私は MacPorts で入れてしまいました。

スクリプト内では convmv は/Applications/convmv か /usr/local/bin/convmv
しか探してくれないので、実行できません。

convmvPath に以下を追加して /opt/local/bin/convmv を探すようにしました。

try
do shell script "ls /opt/local/bin/convmv"
return "/opt/local/bin/convmv"
end try

投稿: nonami | 2008年8月12日 (火) 23時07分

こんにちは。

>make test をすると、UTF8 絡みで fail するので、
これはなんらかのエラーが起こる可能性があるってことでしょうか。
安全を期すならMacPortsの方がいいのかな。

自分は相変わらずG4でintel MacじゃないのでWindows環境が動かないからこれのやりが書いてあった時にこれは何かの役に立ちそうだということで作ってみたけど実際はほとんど使ってないです。

のでなにか不具合があっても気がつかない可能性が大きいので、何か気がついた人はここに書いておいていただけると自分や他の人の参考になると思います。今まで書いてくださった方、ありがとうございます。

投稿: r | 2008年8月13日 (水) 16時01分

convmvをアプリケーションフォルダにコピーして使うのは自分的には嫌なのでアプリケーションバンドルにしてパッケージの中に入れられるようにしてはいかがでしょうか?
その際スプリクトを次のように修正します。
on convmvPath()
try
set MyconvmvPath to path to resource "convmv"
return quoted form of POSIX path of MyconvmvPath
on error
return ""
end try
end convmvPath

あと作業用のディスクイメージの名前をピリオドから始めるとデスクトップに表示されないのでスッキリしていいです。

投稿: umineko | 2008年8月13日 (水) 17時34分

こんにちは。

>>make test をすると、UTF8 絡みで fail するので、
>これはなんらかのエラーが起こる可能性があるってことでしょうか。

正確なところはわかりません。
エラーメッセージをみると、ドイツ語っぽい文字を使ったパスのところで
ひっかかっているようなので、日本語を普通に使っているのであれば、問
題ないのかもしれません。

私も積極的に使っているわけではなく、世の中には自分が使っている windows
しかないと思い込んでいる事務方のボケどもにガタガタ (お前の zip は文字化け
するだの、英語のファイル名は嫌がらせなのかだの) 言われるのがいやで、
このスクリプトを使わせていただこうと思っているので、問題は実体験していません。

投稿: nonami | 2008年8月13日 (水) 22時23分

こんにちは

uminekoさん
アプリフォルダにそのまま入れるのは整理上嫌な人も多いだろうからその方がいいとは思いますが、ライセンスとかよくわからないので今の形になってます。
中に入ってる方が最初の準備が要らないので便利なのは確実ですけどね。

nonamiさん
そうですか。自分でたまに使って何かエラー出たらここに書きたいと思います。滅多に使いませんが。
最近他のサイトでこれの紹介してくださってるところがあって動作の検証されてましたが、そこでも大丈夫みたいなので、まあ大丈夫なのかな。

投稿: r | 2008年8月14日 (木) 23時06分

Universal Binaryでビルドしていただくことは出来ませんか?
Intel Mac で少しは速くなりそうですが・・・

投稿: kumari | 2008年8月18日 (月) 11時49分

AppleScriptアプリケーションにそういった区別はあるのか考えたことが無かったですがアプリケーションバンドルで保存するとUniversalって表示されますね。
Universalで試してみたいって場合はアプリケーションをスクリプトエディタで開いて、「別名で保存」で「アプリケーションバンドル」形式で保存してください。
でも、処理に時間がかかってるのはAppleScriptから呼び出した別コマンドだと思うからほとんど変わらないかな?

投稿: r | 2008年8月19日 (火) 18時27分

ご返答ありがとうございます。やってみました。1秒も変わりませんでした。
以前にPPC用のアプリケーションが異常に重く、Universalのものを使用したら快適だったことがあったので、それで・・・
あんまりアプリケーションのことを分かってなくて失礼しました。

投稿: kumari | 2008年8月20日 (水) 16時33分

MacZip4Win
http://japo.net/rana/2008/08/maczip4win.html
というWindowsで文字化けしないzipが作れる単体ソフトが作られたようです。

投稿: r | 2008年8月26日 (火) 19時05分

はじめまして。
いつも便利に使わせていただいております。
ありがとうございます。

時々、重いファイルだとエラーが起きてしまい
途中で止まってしまうことがあるのですが、その場合、
一時ファイルはどこに保存されているのでしょうか?

圧縮しようとしたファイルを同程度の容量が
HDDの空きスペースから減っておりますので、
どこかに一時ファイルがあるのだと思うのですが、
削除できず困っております。

よろしくご教示ください。

投稿: makoto | 2009年7月20日 (月) 23時43分

tmpフォルダに作るので再起動したりしたら勝手に削除されると思います。
tmpフォルダの場所はややこしいのですが次のAppleScriptで開くことができます。
--
set tmpFolder to path to temporary items folder
tell application "Finder" to open tmpFolder
--
自分の場合
/private/var/folders/8T/8THOGEhoge/TemporaryItems
になってます。

投稿: r | 2009年7月21日 (火) 20時44分

返信遅くなりまして申し訳ございません!
確かにそのようになっておりました。
一時ファイルも削除されているようで
中に何もありませんでした。

ありがとうございました!

投稿: makoto | 2009年8月21日 (金) 09時16分

はじめまして。
検索していたところ、こちらのページにたどり着いたのですが、
先に書かれているmakotoさんと同じ一時ファイルの件で質問がございます。


AppleScriptでフォルダーを開いたところ空だったのですが、
HDDの容量が戻らず、困っています。
再起動も何度かしたのですが、あまりmacに詳しくないため
行き詰まってしまいました…。

最終投稿からだいぶお時間が経っていますが、
お教えいただけますと嬉しいです。

どうぞよろしくお願いいたします。

投稿: eri | 2011年9月16日 (金) 16時52分

こんにちは。
tmpFolderに無ければよくわかりませんが、
とりあえず、Finderでゴミ箱を空にしてみるといいかもしれません。

投稿: r | 2011年9月20日 (火) 19時56分

返信が遅れ申し訳ありませんでした。

そうですか…ゴミ箱も空にしたのですが、
なぜか未だに戻りません--;;
自分でも模索してみます。
どうもありがとうございました!

投稿: eri | 2011年9月27日 (火) 15時53分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/456902/7886121

この記事へのトラックバック一覧です: Windowsで文字化けしないzipを作るAppleScript:

» ファイル圧縮/解凍 [PukiWiki/TrackBack 0.2]
資料 Tag: 圧縮 解凍 異機種ファイル交換の問題 文字化け StuffIt 7の問題点 StuffIt 9 sitアーカイブをStuffIt 5.5J/StuffIt 7.03Jで処理したときにまれに起こる現象 StuffIt 9J/10Jで sit形式アーカイブを解凍すると、時刻が9時間進んでしまう 対策 Mac... [続きを読む]

受信: 2007年11月29日 (木) 17時57分

« DragThingのドックにニュースなどを表示するAppleScript | トップページ | DragThingに日付カウントダウンを表示 »