はじめに
Windowsのコマンド「makecab」をCygwin経由で利用した際のメモです。
本コマンドでは巨大ファイルを複数の「Microsoft Cabinet archive dat」形式に分割することができるので、メーラーでファイルサイズエラーになった場合等に重宝します。
流れとしては
- 送信側でmakecabコマンドを実行
- 受信側で同ファイルを同一ディレクトリに配置し展開
となります。
コマンド実行環境
- Windows 10
- Cygwin
送信側の手順
以下のコマンドを利用します。
$ which makecab /cygdrive/c/WINDOWS/system32/makecab
本コマンドは引数を多く取るので以下のようなスクリプト形式で実行します。
setlocal set ddf=%TEMP%\cabprof.ddf (echo %1) > "%ddf%" makecab /d MaxDiskSize=10240000 /d RptFileName=NUL /d InfFileName=NUL /d DiskDirectoryTemplate="%~n1" /f "%ddf%" del "%ddf%"
上記コマンド群を.cmd形式で保存してください。
今回は分割したいファイルは以下とします。
$ file test.docx test.docx: Microsoft Word 2007+ $ ls -lh test.docx -rwx------+ 1 ... 20M .. test.docx
このMaxDiskSize
は制限に応じて変更が必要で今回は「10240000」→「10M」単位で区切りますが個々の値は適宜変更可能です。
分割したいファイルを以下のように選択すれば
$ ./split.cmd test.docx >setlocal >set ddf=C:\cygwin64\tmp\cabprof.ddf >(echo test.docx ) 1>"C:\cygwin64\tmp\cabprof.ddf" >makecab /d MaxDiskSize=10240000 /d RptFileName=NUL /d InfFileNam e=NUL /d DiskDirectoryTemplate="test" /f "C:\cygwin64\tmp\cabprof.ddf" Cabinet Maker - Lossless Data Compression Tool 20,211,615 bytes in 1 files Total files: 1 Bytes before: 20,211,615 Bytes after: 20,149,743 After/Before: 99.69% compression Time: 7.70 seconds ( 0 hr 0 min 7.70 sec) Throughput: 2561.70 Kb/second >del "C:\cygwin64\tmp\cabprof.ddf"
コマンド実行後は以下のようにファイル名と同名のディレクトリの中に
$ tree . ├── split.cmd ├── test │ ├── 1.cab │ └── 2.cab └── test.docx
指定したファイルサイズで分割されています。
$ ls -l test 合計 19684 -rwx------+ 1 .. 10240000 .. 1.cab -rwx------+ 1 .. 9914853 .. 2.cab
ファイルエクスプローラで見ると以下のような拡張子としてファイルが見え、同ファイルを相手に送信します。
受信側の手順
cab形式のファイル群を同じディレクトリ―に配置し、エクスプローラにて1.cabを選択して右クリック&「プログラムで開く」からエクスプローラを選択します。すると以下のように元のファイルサイズの同ファイルをダブルクリックすれば以下のように展開するパスを選択できるので指定後に「展開」を押下すれば
元のファイルができています。
補足として、「1.cab」を選定しましたが「2.cab」といったそれらを開くと空ファイルしか表示されません。
では不要なのかと言うとそうではなく、例えば同一ディレクトリに「2.cab」以下が無い状態で「1.cab」を展開すると以下のように後続ファイルのパスを指定するように催促されます。
終わりに
大きなファイルをメール等で送付する際に有用なTipsなので、覚えておくとどこかで役立つと思います。