(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

Windows間で巨大ファイルをmakecabコマンドで分割して送付する流れ

スポンサーリンク

はじめに

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

ファイルエクスプローラで見ると以下のような拡張子としてファイルが見え、同ファイルを相手に送信します。

f:id:mtiit:20200604162621p:plain
cabファイル群が作成される

受信側の手順

cab形式のファイル群を同じディレクトリ―に配置し、エクスプローラにて1.cabを選択して右クリック&「プログラムで開く」からエクスプローラを選択します。

f:id:mtiit:20200604190605p:plain
プログラムで開く
すると以下のように元のファイルサイズの
f:id:mtiit:20200604191250p:plain
開いたcabファイル
同ファイルをダブルクリックすれば以下のように展開するパスを選択できるので指定後に「展開」を押下すれば
f:id:mtiit:20200604191407p:plain
展開を選択

元のファイルができています。

補足として、「1.cab」を選定しましたが「2.cab」といったそれらを開くと空ファイルしか表示されません。

では不要なのかと言うとそうではなく、例えば同一ディレクトリに「2.cab」以下が無い状態で「1.cab」を展開すると以下のように後続ファイルのパスを指定するように催促されます。

f:id:mtiit:20200604162928p:plain
後続ファイルがない場合は展開できない

終わりに

大きなファイルをメール等で送付する際に有用なTipsなので、覚えておくとどこかで役立つと思います。