仕事で無圧縮tarが必要になり、少し四苦八苦したのでメモついでに、GNU tarを使った無圧縮tarファイルの作り方を紹介したいと思います。
cygwinにデフォルトでtarが存在すると思いますのでそれを使います。コマンドプロンプトでtarが使えなかった方は、cygwinをインストールしてパスを通してください。
コマンドプロンプトより下記のコマンドを打ちます。
|cmd| tar -cf dst.tar src01.txt src02.mov ||<
これでdst.tarが生成されます。ちなみに今回使用したオプションは、-c:新規作成、-f:出力ファイル指定の2つです。
なお、指定した入力ファイル順に処理されますので、厳密に順番通りに圧縮しないといけない場合には、気をつけないといけないです。
perlスクリプトで無圧縮tarを使いたかったので、書いたサブルーチンはこんな風になりました。cygwinを理解していればもっとマシなコードになるんでしょうけど……
|perl|
#
指定されたフォルダを無圧縮Tarでアーカイブする
#
sub compress_tar() { my ($input_dir, $output_dir, $filename, @file) = @_;
# 現在のカレントディレクトリを保持する use Cwd; my $wd = Cwd::getcwd();
# Tarたんは日本語が苦手なので # 一瞬だけカレントディレクトリを移動させる chdir "$input_dir";
# 無圧縮tarでファイルをまとめる # 日本語混じりの絶対パスでは使えないので # 圧縮対象のファイルがあるフォルダに一時ファイルを作る system("tar -cf $filename @file");
# 一時ファイルを指定されたフォルダへコピーし、 # 一時ファイルを削除する。 system("copy $input_dir\$filename $output_dir /y"); unlink "$input_dir\$filename";
# カレントディレクトリを元に戻す chdir $wd; } ||<
** 追記
C#を使って無圧縮tarファイルを作る方法については、「C#で統合アーカイバのラッパーライブラリを使って無圧縮Tarファイルを簡単に作る - 酢ろぐ!」で書きました。