酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Perlを使って無圧縮tarファイルを作る

仕事で無圧縮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ファイルを簡単に作る - 酢ろぐ!」で書きました。