1
0

More than 1 year has passed since last update.

Windowsのtarコマンドで tar.gzファイルをtarファイルにする

Last updated at Posted at 2022-11-08

NonStopServerではtarコマンドの-zオプション(compress/uncompress with gzip)、gunzipが使えないため、Windowsでtar.gzファイルをtarファイルにする手順とバッチ。

ごくたまにしか実施しないので、自分のための覚書。

前提など

7-zipなどのツールを使ってtarにすることも可能ですが、
Windows10の標準機能の範囲でできる方法で。

tar.gzを一度展開し無圧縮tarファイルを作成しています。

動作確認環境

 Windows 10 Pro 21H2 19044.2006
 Windows 10 Home 21H2 19044.2006

 PSVersion : 5.1.19041.1682

 tarのバージョン:bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp

コマンドでtar.gz を tar にする

tarコマンド

tar.gz 展開
tar xzf archive.tar.gz
tar 作成
tar cf archive.tar [files ... ]

コマンドプロンプトでの実施

処理対象のtar.gzファイルは、カレントディレクトリにある archive.tar.gz の前提。

カレントディレクトリに展開されるため、アーカイブファイルの配置ディレクトリとは別に作業ディレクトリを作成して作業ディレクトリに展開。
作業ディレクトリ内の全ファイルを再アーカイブしている。

rem ファイル確認
dir /b archive*

rem 以下が存在する前提
rem archive.tar

rem 作業ディレクトリ作成
mkdir archive_tmp

cd archive_tmp

rem tar.gz 展開
tar xzf ../archive.tar.gz

rem tar 作成
tar cf ../archive.tar *

cd ..

rem ファイル確認
dir /b archive*

rem 以下が存在する
rem archive.tar
rem archive.tar.gz
rem archive_tmp

rem 作業ディレクトリ(と展開したファイル)削除
rmdir /s /q rchive_tmp

【参考】PowerShellを使用した場合

純粋なPowerShellコマンドではなく、aliasばかりですが…

# ファイル確認
ls archive* -name

# 以下が存在する前提
# archive.tar

# 作業ディレクトリ作成
mkdir archive_tmp

cd archive_tmp

# tar.gz 展開
tar xzf ../archive.tar.gz

# tar 作成
tar cf ../archive.tar *

cd ..

# ファイル確認
ls archive* -name

# 以下が存在する
# archive.tar
# archive.tar.gz
# archive_tmp

# 作業ディレクトリ(と展開したファイル)削除
rm -r archive_tmp

tar.gz を tar にするバッチ

バッチファイル

コマンドプロンプトでの実施手順をベースに作成。

バッチだとコマンド確認しながら実行とはいかないので
入力チェックと、アーカイブファイルの展開・作成前の確認表示を追加。

targz2tar.bat
@echo off
rem ==================================================================
rem  archive.tar.gz を archive.tar にする
rem ------------------------------------------------------------------
rem 【概要】
rem   圧縮アーカイブファイル(.tar.gz)を展開し、
rem   無圧縮アーカイブファイル(.tar)を作成する。
rem  
rem 【引数】
rem    1.処理対象の.tar.gzファイル
rem ==================================================================

rem == check argument
if "%~1"=="" (
    echo;
    echo 処理対象のtar.gzファイルをドラッグandドロップして!
    pause
    exit /b
)

if not "%~x1"==".gz" (
    echo;
    echo これはtar.gzファイルではありません
    pause
    exit /b
)

set tarname=%~n1
set tarext=%tarname:~-4%

if not "%tarext%"==".tar" (
    echo;
    echo これはtar.gzファイルではありません
    pause
    exit /b
)

rem == set filepath
set fullpath_gz=%~f1
set fullpath_tar=%~dpn1

rem == set work directory
set workdir=%fullpath_tar:~,-4%_tmp

rem == 
echo;
echo : tar.gz から tar を作成します
echo;
echo ------------------------------------------------------------
echo * 処理条件
echo ------------------------------------------------------------
echo * tar.gz  : %fullpath_gz%
echo * tar     : %fullpath_tar%
echo *
echo * workdir : %workdir%
echo ------------------------------------------------------------
echo;
echo : 処理を開始します                        処理中止は窓close!
pause

rem == main
echo;
echo create work directory.
mkdir   %workdir%

pushd   %workdir%

echo Extract archive file ...
tar xzf %fullpath_gz%

echo Create archive file ...
tar cf  %fullpath_tar%  *

popd

echo delete work directory.
rmdir /s /q %workdir%

echo;
echo : 処理完了
pause

exit /b 0

使い方

処理対象のtar.gzをこのバッチにドロップする。

または、

処理対象のtar.gzをパラメータ指定してバッチを実行する。

> targz2tar.bat ./archive.tar.gz

実行例

実行結果
: tar.gz から tar を作成します

------------------------------------------------------------
* 処理条件
------------------------------------------------------------
* tar.gz  : C:\bat\archive.tar.gz
* tar     : C:\bat\archive.tar
*
* workdir : C:\bat\archive_tmp
------------------------------------------------------------

: 処理を開始します                        処理中止は窓close!
続行するには何かキーを押してください . . .

create work directory.
Extract archive file ...
Create archive file ...
delete work directory.

: 処理完了
続行するには何かキーを押してください . . .

メモ:引数取得変数と文字列操作

言い換えると、バッチで使っている~を含む変数・処理についての覚書

以下のコマンド(ディレクトリ、引数)で実行した場合

実行コマンド
C:\bat> targz2tar.bat ./archive.tar.gz

バッチで使っている%~で始まる変数に何が設定されるのか

変数 取得する情報 取得値
1 %~1 引数1 ./archive.tar.gz
2 %~x1 引数1のファイル拡張子 .gz
3 %~n1 引数1のファイル名(ファイル拡張子は含まない) archive.tar
4 %~f1 引数1の完全修飾パス(フルパス) C:\bat\archive.tar.gz
5 %~dpn1 引数1のドライブ文字+パス+ファイル名 C:\bat\archive.tar

バッチで使っている~を含む処理=文字列操作は、何をしているのか

rem 引数1のファイル名
rem  = archive.tar
set tarname=%~n1

rem archive.tar の後ろから4文字
rem  = .tar
set tarext=%tarname:~-4%

rem 引数1のドライブ文字+パス+ファイル名
rem  = C:\bat\archive.tar
set fullpath_tar=%~dpn1

rem C:\bat\archive.tar の後ろから4文字を除外 + '_tmp'
rem  = C:\bat\archive_tmp
set workdir=%fullpath_tar:~,-4%_tmp

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0