태그 보관물: 7-zip

7-zip

한 번에 .tar.gz의 압축을 풀려면 어떻게해야합니까 (7-Zip 사용)? 오른쪽 버튼으로 클릭

Windows XP에서 7-Zip을 사용하고 있으며 .tar.gz 파일을 다운로드 할 때마다 파일을 완전히 추출하는 데 두 단계가 필요합니다.

  1. example.tar.gz 파일을 마우스 오른쪽 버튼으로 클릭 하고 상황에 맞는 메뉴에서 7-Zip-> Extract Here 를 선택 합니다.
  2. 그런 다음 결과 example.tar 파일 을 가져 와서 마우스 오른쪽 버튼으로 다시 클릭 하고 상황에 맞는 메뉴에서 7-Zip-> Extract Here 를 선택하십시오.

상황에 맞는 메뉴를 통해 한 번에이를 수행 할 수있는 방법이 있습니까?



답변

실제로는 아닙니다. .tar.gz 또는 .tgz 파일은 실제로 두 가지 형식 .tar, 즉 아카이브와 .gz압축입니다. 따라서 첫 번째 단계는 압축 해제되고 두 번째 단계는 아카이브를 추출합니다.

한 번에 모든 작업을 수행하려면 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 파일의 한 단계 처리를 요청 / 투표하는 사람들에 대한 오랜 스레드가 있습니다 . 지금까지 부족한 행동은 누군가가 단계적으로 의미있게 기여할 때까지 (코드, 돈, 무언가) 일어나지 않을 것임을 나타냅니다.


답변

오래된 질문이지만 오늘 나는 그것을 고투하고 있었으므로 여기에 2c가 있습니다. 7zip 명령 줄 도구 “7z.exe”(v9.22가 설치되어 있음)는 stdout에 쓰고 stdin에서 읽을 수 있으므로 파이프를 사용하여 중간 tar 파일없이 수행 할 수 있습니다.

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

어디:

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)을 참조하십시오.

regedit 또는 stexbar 와 같은 타사 도구를 사용하여 위 명령을 호출하는 .tar.gz / .tgz 파일에 대한 상황에 맞는 메뉴 항목을 만들 수 있습니다 .


답변

7-zip 9.04부터 일반 .tar파일에 중간 저장소를 사용하지 않고 결합 추출을 수행하는 명령 행 옵션이 있습니다.

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

-tgzip입력 파일 .tgz대신 이름이 지정된 경우 필요합니다 .tar.gz.


답변

Windows XP를 사용하고 있으므로 기본적으로 Windows 스크립팅 호스트가 설치되어 있어야합니다. 그렇게 말하면, 필요한 것을 수행하는 WSH JScript 스크립트가 있습니다. 코드를 파일 이름 xtract.bat 또는 해당 행을 따라 복사하십시오 (확장자가있는 한 무엇이든 가능 .bat).

xtract.bat example.tar.gz

기본적으로 스크립트는 스크립트 폴더와 PATH7z.exe에 대한 시스템 환경 변수를 확인합니다. 내용을 찾는 방법을 변경하려면 스크립트 상단의 SevenZipExe 변수를 실행 파일 이름으로 변경할 수 있습니다. (예 : 7za.exe 또는 7z-real.exe) SevenZipDir을 변경하여 실행 파일의 기본 디렉토리를 설정할 수도 있습니다. 그래서 만약 7z.exe에있다 C:\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);


답변

보시다시피 7-Zip은 이것에별로 좋지 않습니다. 사람들은 한 요구
2009 년 이후 타르볼 원자 조작 여기에 작은 프로그램입니다
그것을 할 수 있습니다 이동에 (4백90킬로바이트가), 나는 그것을 컴파일 당신을 위해.

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)
    }
  }
}


답변

17063를 구축 윈도우 10에서 시작 tarcurl지원, 그러므로 사용하여 한 단계에서 .tar.gz를 파일을 압축 해제 할 수 있습니다 tar아래와 같이 명령을 사용합니다.

tar -xzvf your_archive.tar.gz

tar --help대한 자세한 내용을 보려면 입력 하십시오 tar.


답변

7za는 다음과 같이 올바르게 작동합니다.

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