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 xzf archive.tar.gz
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 にするバッチ
バッチファイル
コマンドプロンプトでの実施手順をベースに作成。
バッチだとコマンド確認しながら実行とはいかないので
入力チェックと、アーカイブファイルの展開・作成前の確認表示を追加。
@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