windows xp – 7-Zipを使って一度に.tar.gzを解凍するにはどうすればいいですか?

7-zip windows-xp

私はWindows XPで7-Zipを使用していますが、.tar.gzファイルをダウンロードするたびに、ファイルを完全に解凍するために2つのステップが必要です

  1. example.tar.gzファイルを右クリックして、コンテキストメニューから7-Zip –> Extract Hereを選択します
  2. その後、結果のexample.tarファイルを取り出し、再度右クリックして、コンテキストメニューから7-Zip –> Extract Hereを選択します

コンテキストメニューから一度にできる方法はありますか?

  92  quickcel  2009-12-07


ベストアンサー

そうではありません。.tar.gz や .tgz ファイルは、実際には二つのフォーマットです。.tar はアーカイブ、.gz は圧縮です。つまり、最初のステップで解凍し、2番目のステップでアーカイブを抽出します

それを一括して行うには、tarプログラムが必要です。Cygwinにはこれが含まれています

tar xzvf foobaz.tar.gz

; x = eXtract
; z = filter through gZip
; v = be Verbose (show activity)
; f = filename

また、7-zip GUIでファイルを開くことで、”ワンステップで “それを行うこともできます。.tar.gz ファイルを開き、含まれている .tar ファイルをダブルクリックして、それらのファイルをお好みの場所に展開してください

こちら には、tgz と bz2 ファイルのワンステップ処理を求める/投票する人々の長いスレッドがあります。これまでのところアクションがないということは、誰かが手を差し伸べて有意義な貢献(コードやお金、何か)をしない限り、それが実現しないということを示しています

49  quack quixote  2009-12-07


古い質問ですが、今日は悩んでいたので2c.です。7zipコマンドラインツール「7z.exe」(私はv9.22をインストールしている)は標準出力への書き込みと標準入力からの読み込みができるので、パイプを使えば中間のtarファイルがなくてもできる

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"

Where:

x     = Extract with full paths command
-so   = write to stdout switch
-si   = read from stdin switch
-aoa  = Overwrite all existing files without prompt.
-ttar = Treat the stdin byte stream as a TAR file
-o    = output directory

コマンドラインコマンドやスイッチの詳細については、インストールディレクトリのヘルプファイル (7-zip.chm) を参照してください

上記のコマンドを呼び出す .tar.gz/.tgz ファイルのコンテキストメニュー項目を作成するには、regedit や stexbar のようなサードパーティツールを使用します

30  user2856  2013-02-05


7-zip 9.04 以降では、プレーンな .tar ファイルの中間ストレージを使わずに結合抽出を行うコマンドラインオプションがあります

7z x -tgzip -so theinputfile.tgz | 7z x -si -ttar

入力ファイルの名前が.tar.gzではなく.tgzの場合は-tgzipが必要です

11  Joachim Sauer  2018-01-07


Windows XP を使用しているので、Windows Scripting Host がデフォルトでインストールされているはずです。そうは言っても、あなたが必要としていることを実行するための WSH JScript スクリプトは以下の通りです。コードを xtract.bat などのファイル名にコピーして (拡張子 .bat であれば何でも構いません)、実行してください

xtract.bat example.tar.gz

デフォルトでは、スクリプトはスクリプトのフォルダとシステムのPATH環境変数の7z.exeをチェックします。検索方法を変更したい場合は、スクリプトの先頭にあるSevenZipExe変数を実行可能な名前に変更することができます(例えば、7za.exeや7z-real.exeなど)。(例えば、7za.exe や 7z-real.exe など) また、SevenZipDir を変更することで、実行ファイルのデフォルトのディレクトリを設定することもできます。例えば、7z.exeC:\Windows\system32\7z.exeにある場合、以下のようにします

var SevenZipDir = "C:\\Windows\\system32";

とにかく、これが台本です

@set @junk=1 /* vim:set ft=javascript:
@echo off
cscript //nologo //e:jscript "%~dpn0.bat" %*
goto :eof
*/
/* Settings */
var SevenZipDir = undefined;
var SevenZipExe = "7z.exe";
var ArchiveExts = ["zip", "tar", "gz", "bzip", "bz", "tgz", "z", "7z", "bz2", "rar"]

/* Multi-use instances */
var WSH = new ActiveXObject("WScript.Shell");
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var __file__ = WScript.ScriptFullName;
var __dir__ = FSO.GetParentFolderName(__file__);
var PWD = WSH.CurrentDirectory;

/* Prototypes */
(function(obj) {
obj.has = function object_has(key) {
return defined(this[key]);
};
return obj;
})(this.Object.prototype);

(function(str) {
str.trim = function str_trim() {
return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};
})(this.String.prototype);

(function(arr) {
arr.contains = function arr_contains(needle) {
for (var i in this) {
if (this[i] == needle) {
return true;
}
}
return false;
}
})(this.Array.prototype);

/* Utility functions */
function defined(obj)
{
return typeof(obj) != "undefined";
}

function emptyStr(obj)
{
return !(defined(obj) && String(obj).length);
}

/* WSH-specific Utility Functions */
function echo()
{
if(!arguments.length) return;
var msg = "";
for (var n = 0; n < arguments.length; n++) {
msg += arguments[n];
msg += " ";
}
if(!emptyStr(msg))
WScript.Echo(msg);
}

function fatal(msg)
{
echo("Fatal Error:", msg);
WScript.Quit(1);
}

function findExecutable()
{
// This function searches the directories in;
// the PATH array for the specified file name;
var dirTest = emptyStr(SevenZipDir) ? __dir__ : SevenZipDir;
var exec = SevenZipExe;
var strTestPath = FSO.BuildPath(dirTest, exec);
if (FSO.FileExists(strTestPath))
return FSO.GetAbsolutePathName(strTestPath);

var arrPath = String(
dirTest + ";" +
WSH.ExpandEnvironmentStrings("%PATH%")
).split(";");

for(var i in arrPath) {
// Skip empty directory values, caused by the PATH;
// variable being terminated with a semicolon;
if (arrPath[i] == "")
continue;

// Build a fully qualified path of the file to test for;
strTestPath = FSO.BuildPath(arrPath[i], exec);

// Check if (that file exists;
if (FSO.FileExists(strTestPath))
return FSO.GetAbsolutePathName(strTestPath);
}
return "";
}

function readall(oExec)
{
if (!oExec.StdOut.AtEndOfStream)
return oExec.StdOut.ReadAll();

if (!oExec.StdErr.AtEndOfStream)
return oExec.StdErr.ReadAll();

return -1;
}

function xtract(exec, archive)
{
var splitExt = /^(.+)\.(\w+)$/;
var strTmp = FSO.GetFileName(archive);
WSH.CurrentDirectory = FSO.GetParentFolderName(archive);
while(true) {
var pathParts = splitExt.exec(strTmp);
if(!pathParts) {
echo("No extension detected for", strTmp + ".", "Skipping..");
break;
}

var ext = pathParts[2].toLowerCase();
if(!ArchiveExts.contains(ext)) {
echo("Extension", ext, "not recognized. Skipping.");
break;
}

echo("Extracting", strTmp + "..");
var oExec = WSH.Exec('"' + exec + '" x -bd "' + strTmp + '"');
var allInput = "";
var tryCount = 0;

while (true)
{
var input = readall(oExec);
if (-1 == input) {
if (tryCount++ > 10 && oExec.Status == 1)
break;
WScript.Sleep(100);
} else {
allInput += input;
tryCount = 0;
}
}

if(oExec. ExitCode!= 0) {
echo("Non-zero return code detected.");
break;
}

WScript.Echo(allInput);

strTmp = pathParts[1];
if(!FSO.FileExists(strTmp))
break;
}
WSH.CurrentDirectory = PWD;
}

function printUsage()
{
echo("Usage:\r\n", __file__, "archive1 [archive2] ...");
WScript.Quit(0);
}

function main(args)
{
var exe = findExecutable();
if(emptyStr(exe))
fatal("Could not find 7zip executable.");

if(!args.length || args(0) == "-h" || args(0) == "--help" || args(0) == "/?")
printUsage();

for (var i = 0; i < args.length; i++) {
var archive = FSO.GetAbsolutePathName(args(i));
if(!FSO.FileExists(archive)) {
echo("File", archive, "does not exist. Skipping..");
continue;
}
xtract(exe, archive);
}
echo("\r\nDone.");
}

main(WScript.Arguments.Unnamed);

4  Charles Grunwald  2011-11-26


Windows 10 build 17063以降では、tarcurlがサポートされているため、以下のようにtarコマンドを使用して一度に.tar.gzファイルを解凍することができます

tar -xzvf your_archive.tar.gz

tarの詳細については、tar --helpと入力してください

3  Juniver Hazoic  2019-04-23


ご覧のように7-Zipは苦手です。2009年から人々はタールボールの原子操作を求めているこれができるGoの小さなプログラム (490 KB)があります

package main
import (
"archive/tar"
"compress/gzip"
"flag"
"fmt"
"io"
"os"
"strings"
)

func main() {
flag.Parse() // get the arguments from command line
sourcefile := flag.Arg(0)
if sourcefile == "" {
fmt.Println("Usage : go-untar sourcefile.tar.gz")
os.Exit(1)
}
file, err := os.Open(sourcefile)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
var fileReader io.ReadCloser = file
// just in case we are reading a tar.gz file,
// add a filter to handle gzipped file
if strings.HasSuffix(sourcefile, ".gz") {
if fileReader, err = gzip.NewReader(file); err != nil {
fmt.Println(err)
os.Exit(1)
}
defer fileReader.Close()
}
tarBallReader := tar.NewReader(fileReader)
// Extracting tarred files
for {
header, err := tarBallReader.Next()
if err != nil {
if err == io.EOF {
break
}
fmt.Println(err)
os.Exit(1)
}
// get the individual filename and extract to the current directory
filename := header.Name
switch header.Typeflag {
case tar.TypeDir:
// handle directory
fmt.Println("Creating directory :", filename)
// or use 0755 if you prefer
err = os.MkdirAll(filename, os.FileMode(header.Mode))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
case tar.TypeReg:
// handle normal file
fmt.Println("Untarring :", filename)
writer, err := os.Create(filename)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
io.Copy(writer, tarBallReader)
err = os.Chmod(filename, os.FileMode(header.Mode))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
writer.Close()
default:
fmt.Printf("Unable to untar type : %c in file %s", header.Typeflag,
filename)
}
}
}

2  Steven Penny  2016-10-29


7zaは以下のように正しく動作します

7za.exe x D:\pkg-temp\Prod-Rtx-Service.tgz -so | 7za.exe x -si -ttar -oD:\pkg-temp\Prod-Rtx-Service

0  Alan Hu  2018-08-31


タイトルとURLをコピーしました