## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > zipfs

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    zipfs — TTcl 内部で ZIP ファイルを認識し動かす Mount and work with ZIP files within Tcl
  構文 SYNOPSIS
  説明 DESCRIPTION
    zipfs canonical ?mountpoint? filename
    zipfs exists filename
    zipfs find directoryName
    zipfs info file
    zipfs list ?(-glob|-regexp)? ?pattern?
    zipfs mount
    zipfs mount mountpoint
    zipfs mount zipfile mountpoint ?password?
    zipfs mountdata data mountpoint
    zipfs root
    zipfs unmount mountpoint.
  ZIP CREATION COMMANDS
    zipfs mkzip outfile indir ?strip? ?password?
    zipfs mkimg outfile indir ?strip? ?password? ?infile?
    zipfs mkkey password
    zipfs lmkimg outfile inlist ?password? ?infile?
    zipfs lmkzip outfile inlist ?password?
  註意 NOTE
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

zipfs — TTcl 内部で ZIP ファイルを認識し動かす Mount and work with ZIP files within Tcl

### 構文 SYNOPSIS

zipfs canonical ?mountpoint? filename
zipfs exists filename
zipfs find directoryName
zipfs info filename
zipfs list ?(-glob|-regexp)? ?pattern?
zipfs lmkimg outfile inlist ?password? ?infile?
zipfs lmkzip outfile inlist ?password?
zipfs mkimg outfile indir ?strip? ?password? ?infile?
zipfs mkkey password
zipfs mkzip outfile indir ?strip? ?password?
zipfs mount ?zipfile? ?mountpoint? ?password?
zipfs mountdata data mountpoint
zipfs root
zipfs unmount mountpoint

### 説明 DESCRIPTION

zipfs 命令は､Tcl に ZIP 書庫ファイルの内容を仮想ファイル系として据付ける能力を提供する｡ Tclの ZIP書庫ファイルは限定された基本的な特性と指示項目に対応する｡ 対応する貯蔵手段は､STORE と DEFLATEのみを含み､ 任意追加の単純な暗号化を伴うが､その内容の臨時検査を防ぐ為には充分であるが､適度に決意した攻撃者による接近を防ぐことはできない 強力な暗号化と､多重部分書庫と､OS汎データと､zip64書式と､bzip2の様な他の圧縮手段と､には対応してない｡ The zipfs command provides Tcl with the ability to mount the contents of a ZIP archive file as a virtual file system. Tcl's ZIP archive support is limited to basic features and options. Supported storage methods include only STORE and DEFLATE with optional simple encryption, sufficient to prevent casual inspection of their contents but not able to prevent access by even a moderately determined attacker. Strong encryption, multi-part archives, platform metadata, zip64 formats and other compression methods like bzip2 are not supported.

据付けられた書庫内部のファイルは書込みできるが､ 新しいファイルやディレクトリーは作れない｡ 更に､ファイルへの修正は記憶域内の据付け書庫に限定され､且つ､ディスクでは許可されない｡ Files within mounted archives can be written to but new files or directories cannot be created. Further, modifications to files are limited to the mounted archive in memory and are not persisted to disk.

据付られた書庫の経路は全てのOS上で大文字小文字を区別する｡ Paths in mounted archives are case-sensitive on all platforms.

zipfs canonical ?mountpoint? filename
  これは､ファイルの名前filenameをとり､ 結果として､据付けられ､zipfs内に対応点けされる場所を生成する｡ もし､指定されると､ mountpointは､対応点けがなされる箇所の内部に据付けよ､と謂う; もし､省略されると､zipfs系の主根本が使われる｡ This takes the name of a file, filename, and produces where it would be mapped into a zipfs mount as its result. If specified, mountpoint says within which mount the mapping will be done; if omitted, the main root of the zipfs system is used.

zipfs exists filename
  与えられたファイル名が接続された zipfs 内にあれば 1 を､無ければ 0 を返す｡ Return 1 if the given filename exists in the mounted zipfs and 0 if it does not.

zipfs find directoryName
  ディレクトリーdirectoryNameの下の経路のリストを返す､ そこは､zipfsが書庫を据付けた処の必要はない｡ 経路は､directoryNameが先頭に付く｡ この命令は､zipfs mkzip と zipfs mkimgによっても､使用される｡ Returns the list of paths under directory directoryName which need not be within a zipfs mounted archive. The paths are prefixed with directoryName. This command is also used by the zipfs mkzip and zipfs mkimg commands.

zipfs info file
  接続された zipfs 内の与えられた file に関する情報を返す｡情報は以下で構成される: Return information about the given file in the mounted zipfs. The information consists of:

  1. ファイルを含む ZIP 書庫ファイルの名前､ the name of the ZIP archive file that contains the file,

  2. 解凍後のファイル寸法､ the size of the file after decompressions,

  3. 圧縮されたファイルの寸法､ the compressed size of the file, and

  4. ZIP 書庫ファイル内の圧縮データの開始移動量｡ the offset of the compressed data in the ZIP archive file.

  特別な場合として､据付けた位置の問合せは､ (4)内の偏倚としてzipデータの開始を与える､ それは､実行可能からzip情報を切詰める為に使う事ができる｡ 据付け位置の祖先を問合せると不都合が生じる事になる｡ As a special case, querying the mount point gives the start of the zip data as the offset in (4), which can be used to truncate the zip information from an executable. Querying an ancestor of a mount point will raise an error.

zipfs list ?(-glob|-regexp)? ?pattern?
  もしpatternが指定されない場合､本命令は､全zipfs据付け書庫を横断するファイルのリストを返す｡ もしpatternが指定されると､紋様に合致する経路のみが返される｡ 無為設定､又は-glob選択では､紋様は大域紋様として扱われ､ 且つ､合致は､string match命令に関する記述としてなされる｡ 代りに､､-regexp指示項目は､正規表現として､紋様の合致を指定する事に使われ得る ファイル名は任意の順番に返される｡ 註意すべきは､経路分離記号は､合致では通常の文字として扱われる｡ 従って､前向き斜線が経路分離記号として扱われる｡ 返された経路は､実際の書庫内に実際の処含まれている経路のみを含む ､且つ､据付経路内の中間のディレクトリーは含まれない｡ If pattern is not specified, the command returns a list of files across all zipfs mounted archives. If pattern is specified, only those paths matching the pattern are returned. By default, or with the -glob option, the pattern is treated as a glob pattern and matching is done as described for the string match command. Alternatively, the -regexp option may be used to specify matching pattern as a regular expression. The file names are returned in arbitrary order. Note that path separators are treated as ordinary characters in the matching. Thus forward slashes should be used as path separators in the pattern. The returned paths only include those actually in the archive and does not include intermediate directories in mount paths.

zipfs mount

zipfs mount mountpoint

zipfs mount zipfile mountpoint ?password?

  zipfs mount命令は､ZIP書庫を､Tcl 仮想ファイル系として据付け､ 且つ､現在の据付けに関する情報を返す｡ The zipfs mount command mounts ZIP archives as Tcl virtual file systems and returns information about current mounts.

  引数無しでは､本命令は､対応する ZIP書庫の経路への 据付け位置対応点け辞書を返す｡ With no arguments, the command returns a dictionary mapping mount points to the path of the corresponding ZIP archive.

  単一の引数の形式内で､本命令は､ 指定された据付け位置で据付けられた ZIP書庫の経路を返す｡ In the single argument form, the command returns the file path of the ZIP archive mounted at the specified mount point.

  第三の形式内では､ 本命令は､ZIP書庫zipfileを､ mountpointでのTcl仮想ファイル系として､据付る｡ この命令の実行後､zipfile内に含まれるファイルは､ 据付位置での､正規ファイルであるとTcl に現れることになる｡ もし､mountpointが空文字列として指定されると､ 無為設定として[zipfs root]である｡ 本命令は､正規化された据付I経路を返す｡ In the third form, the command mounts the ZIP archive zipfile as a Tcl virtual filesystem at mountpoint. After this command executes, files contained in zipfile will appear to Tcl to be regular files at the mount point. If mountpoint is specified as an empty string, it is defaulted to the [zipfs root]. The command returns the normalized mount point path.

  もし､zipfsファイル系根本の下でなければ､ 据付け位置は､尊敬の念をもって正規化される｡ 譬えば､mt又は/mtとして渡された据付位置は//zipfs:/mtに正規化される (zipfs rootを渡され “//zipfs:/” を返す)｡もし､据付位置が､装置駆動又はUNC の巻を含むと､不都合が生じる｡ If not under the zipfs file system root, mountpoint is normalized with respect to it. For example, a mount point passed as either mt or /mt would be normalized to //zipfs:/mt (given that zipfs root returns “//zipfs:/”). An error is raised if the mount point includes a drive or UNC volume.

  nota bene 現在の稼働ディレクトリーは､OSによって維持される概念であり､ cdを使って､据付られた書庫内を使うのは､現在の処理内のみである､ 従って､完全には一致してない(譬えば､ もし､共有外部函数が､Tclのファイル系 API経由よりも､直接OSに接近使用すると､ 据付け内部として現在のディレクトリーを見えずに､ 且つ､据付け内部のファイルに接近する事も不可能になる)｡ [訳註:nota bene よく注意(羅甸語)] NB: because the current working directory is a concept maintained by the operating system, using cd into a mounted archive will only work in the current process, and then not entirely consistently (e.g., if a shared library uses direct access to the OS rather than through Tcl's filesystem API, it will not see the current directory as being inside the mount and will not be able to access the files inside the mount).

zipfs mountdata data mountpoint
  dataを含むZIP書庫を､mountpointにある､Tcl仮想ファイル系として 据付ける｡ Mounts the ZIP archive content data as a Tcl virtual filesystem at mountpoint.

zipfs root
  現在のOSに関する､zipfs巻の為の､据付け位置を指し示す､固定の文字列､を返す｡ 使用者は､全てのOSに関して同じ固定文字列である据付け位置に､頼るべきではない｡ Returns a constant string which indicates the mount point for zipfs volumes for the current platform. User should not rely on the mount point being the same constant string for all platforms.

zipfs unmount mountpoint.
  mountpointに据付られた､以前に据付られたZIP書庫の据付けを解く｡ もし､据付けられた書庫内部のどれかのファイルが開かれると命令は失敗する｡ Unmounts a previously mounted ZIP archive mounted to mountpoint. The command will fail with an error exception if there are any files within the mounted archive are open.

#### ZIP CREATION COMMANDS

この梱包も又､ Tcl 応用譜としてZIP書庫の生成を援助する為の幾つかの命令を提供する｡ This package also provides several commands to aid the creation of ZIP archives as Tcl applications.

zipfs mkzip outfile indir ?strip? ?password?
  入力ディレクトリー indir(通常ファイルのみを含む)の内容からoutfileと名付けられた ZIP書庫ファイルを ､追加のZIP暗証番号 passwordを伴って､生成する｡ indirの下のファイルを処理する間､ strip内に与えられた任意追加のファイル前置辞は､対象ファイル名の始まりが､非空であれば､剥取られる｡ 剥取り時に､原資ディレクトリー名全体か､その親ディレクトリ-の孰れかを剥ぎ取るのが普通である｡ Creates a ZIP archive file named outfile from the contents of the input directory indir (contained regular files only) with optional ZIP password password. While processing the files below indir the optional file name prefix given in strip is stripped off the beginning of the respective file name if non-empty. When stripping, it is common to remove either the whole source directory name or the name of its parent directory.

  註意:indir媒介変数の選択(前置辞剥取りよりも選ばれない)は､ 書庫内容の根本名を後に定める｡ Caution: the choice of the indir parameter (less the optional stripped prefix) determines the later root name of the archive's content.

zipfs mkimg outfile indir ?strip? ?password? ?infile?
  zipfs mkzip に似ていて､影像(可能性として新しい実行ファイル)を生成する; この命令への､殆どの媒介変数の為の記述は､そちらの命令を見よ､ ､理由は､それは実質的に､ここに振舞う｡ もし､outfile があると､警告なしに上書きされる｡ Creates an image (potentially a new executable file) similar to zipfs mkzip; see that command for a description of most parameters to this command, as they behave identically here. If outfile exists, it will be silently overwritten.

  もし､infile假引数が指定されると､このファイルは､ZIP書庫の先頭に追加される､ それ以外は､info nameofexecutable(即ち､実行プロセスの実行可能ファイル) に戻されたファイルが使われる｡ もし､password假引数が空文字列でない場合､その暗証番号の難読化された版 (zipfs mkkey参照)が､ 影像､及び､出力ファイルのZIP集塊､及び､ZIP集塊の内容物は､その暗証番号で 保護される｡ もし､出発影像がそれに付着されたZIP書庫を有す場合､ 新しいZIP書庫が追加される前に､ outfile内の複写からそれは除去される｡ If the infile parameter is specified, this file is prepended in front of the ZIP archive, otherwise the file returned by info nameofexecutable (i.e., the executable file of the running process, typically wish or tclsh) is used. If the password parameter is not the empty string, an obfuscated version of that password (see zipfs mkkey) is placed between the image and ZIP chunks of the output file and the contents of the ZIP chunk are protected with that password. If the starting image has a ZIP archive already attached to it, it is removed from the copy in outfile before the new ZIP archive is added.

  もし､ ファイルmain.tclが､結果の書庫のディレクトリー内に存在し､且つ､ 書庫が付着している影像ファイルがtclsh(又はwish)即値である (無為設定では成立する､但し構成設定に依存する)と､ 結果の映像は実行可能であり､それは､ ZIP書庫を据付た後､そのmain.tcl内の記述譜にsource記述譜 を課す､そして､ 実行されたその記述譜を､一度exitする事になる｡ If there is a file, main.tcl, in the root directory of the resulting archive and the image file that the archive is attached to is a tclsh (or wish) instance (true by default, but depends on your configuration), then the resulting image is an executable that will source the script in that main.tcl after mounting the ZIP archive, and will exit once that script has been executed.

  註意: tclsh と wishは､中核実装外部函数の動的束縛又は静的束縛を 使って､機械語翻訳できる｡ 動的束縛を伴い､基本応用譜Tcl_Library内容が､libtclとlibtk共有外部函数に それぞれ添付される｡ 静的束縛を伴い､基本応用譜Tcl_Library内容等が応用譜か､ tclshかwishに添付される｡ 静的に作成されたtclshを伴うmkimgを使う時､ 新しい応用譜に新しい書庫を添付して生成する前に､ 添付された書庫を､最初に､ 臨時の場所抽出して､保存する事と､次に 何であれ､追加の望ましいファイルを追加する事とは､ 使用者の責務である｡ Note: tclsh and wish can be built using either dynamic binding or static binding of the core implementation libraries. With a dynamic binding, the base application Tcl_Library contents are attached to the libtcl and libtk shared library, respectively. With a static binding, the Tcl_Library contents, etc., are attached to the application, tclsh or wish. When using mkimg with a statically built tclsh, it is the user's responsibility to preserve the attached archive by first extracting it to a temporary location, and then add whatever additional files desired, before creating and attaching the new archive to the new application.

zipfs mkkey password
  綺麗な文書のpassword引数を与えられて､ 難読化された文字列の版が､ zipfs mkimg命令内で使われたのと同じ書式で返される｡ Given the clear text password argument, an obfuscated string version is returned with the same format used in the zipfs mkimg command.

zipfs lmkimg outfile inlist ?password? ?infile?
  この命令は､zipfs mkimgに似ているが､但し､入力ディレクトリーの代りに､ inlistは必ずTclリストであって､そこでは､ 奇数番要素は､影像内の書庫に複写されるファイルの名前であって､ 且つ､偶数要素は､その書庫内部の対応する名前である｡ This command is like zipfs mkimg, but instead of an input directory, inlist must be a Tcl list where the odd elements are the names of files to be copied into the archive in the image, and the even elements are their respective names within that archive.

zipfs lmkzip outfile inlist ?password?
  この命令は､zipfs mkzip に似ているが､但し､入力ディレクトリーの代りに､ inlistは必ずTclリストであって､そこでは､ 奇数番要素は､影像内の書庫に複写されるファイルの名前であって､ 且つ､偶数要素は､その書庫内部の対応する名前である｡ This command is like zipfs mkzip, but instead of an input directory, inlist must be a Tcl list where the odd elements are the names of files to be copied into the archive, and the even elements are their respective names within that archive.

### 註意 NOTE

現在の幾つかの､複数の任意追加の假引数を使った､副命令の構文は､ ?-option value?紋様の代りに､将来の対応では変更され得る｡｡ 従って､現在の構文は安定とは看做されない｡ The current syntax for certain subcommands using multiple optional parameters might change in the future to support an ?-option value? pattern instead. Therfore, the current syntax should not be considered stable.

### 用例 EXAMPLES

ZIP書庫を応用譜ディレクトリーとして据付け､且つ､再度､据付けを外す前に､ 兎に角､符号命令を実行する: Mounting an ZIP archive as an application directory and running code out of it before unmounting it again:

    set zip myApp.zip
    set base [file join [zipfs root] myApp]

    zipfs mount $zip $base
    # 今は､$base に myApp.zipの内容が含まれる
    # $base now has the contents of myApp.zip

    source [file join $base app.tcl]
    # 内容物を使い､そこから外部函数を積込み､そして, etc...
    # use the contents, load libraries from it, etc...

    zipfs unmount $base

書庫内に置くべき内容物を含んでいる､既存のディレクトリーを与えられて､ ZIP書庫を生成す｡ 註意すべきは､原資ディレクトリーは､ 書庫内のそれぞれのファイル名から､外部のディレクトリー名を剥取る為に､ 二度与えられる｡ Creating a ZIP archive, given that a directory exists containing the content to put in the archive. Note that the source directory is given twice, in order to strip the exterior directory name from each filename in the archive.

    set sourceDirectory [file normalize myApp]
    set targetZip myApp.zip

    zipfs mkzip $targetZip $sourceDirectory $sourceDirectory

ZIP生成時と､その据付け時に､暗証番号を提供する事により､ ZIP書庫に暗号を適用できる｡ Encryption can be applied to ZIP archives by providing a password when building the ZIP and when mounting it.

    set zip myApp.zip
    set sourceDir [file normalize myApp]
    set password "hunter2"
    set base [file join [zipfs root] myApp]

    # 暗証番号生成する
    # Create with password
    zipfs mkzip $targetZip $sourceDir $sourceDir $password

    # 暗証番号を伴い据付ける
    # Mount with password
    zipfs mount $zip $base $password

次の用例は､ ファイル “myApp.bin” 内の､結果の実行可能譜から呼出しされ､保存される､ tclshファイルにZIP書庫を添付することにより 実行可能な応用譜を､生成する｡ 暗証番号を伴って実行可能な映像を生成する時､ 暗証番号は実行可能譜内部の 覆い隠された形式内部に置かれるので､ 応用譜は埋込まれたZIP書庫内部のファイルを読むことができるが､ 但し､通常の検査ではそれが読めない｡ The following example creates an executable application by appending a ZIP archive to the tclsh file it was called from and storing the resulting executable in the file “myApp.bin”. When creating an executable image with a password, the password is placed within the executable in a shrouded form so that the application can read files inside the embedded ZIP archive yet casual inspection cannot read it.

    set appDir [file normalize myApp]
    set img "myApp.bin"
    set password "hunter2"

    # 基本的応用譜を定める為に幾つかの単純な内容を生成する
    # Create some simple content to define a basic application
    file mkdir $appDir
    set f [open $appDir/main.tcl w]
    puts $f {
        puts "Hi. This is [info script]"
    }
    close $f

    # 実行可能な応用譜を生成する
    # Create the executable application
    zipfs mkimg $img $appDir $appDir $password

    # 今､無効になった appDir フォルダーを分離する
    # remove the now obsolete temporary appDir folder
    file delete -force $appDir

    # 実行可能譜を放つ､標準出力にその出力を印刷する
    # Launch the executable, printing its output to stdout
    exec $img >@stdout
    # [zipfs root] が "//zipfs:/"を返すと仮定し､次の行を印刷する:
    # Hi. This is //zipfs:/app/main.tcl
    # となる筈...
    # prints the following line assuming [zipfs root] returns "//zipfs:/":
    # Hi. This is //zipfs:/app/main.tcl

### SEE ALSO

tclsh, file, zipfs, zlib

### KEYWORDS

compress, filesystem, zip
Copyright © 2015 Jan Nijtmans <jan.nijtmans(at)gmail.com>
Copyright © 2015 Christian Werner <chw(at)ch-werner.de>
Copyright © 2015 Sean Woods <yoda(at)etoyoc.com>