7-Zip 명령 줄을 사용하여 하위 디렉토리로 아카이브하는 방법은 무엇입니까? 또는 보관하는 동안 폴더 구조를 어떻게 유지합니까?


16

다음과 같은 파일이 많이 있습니다.

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

보관하는 동안 폴더 구조 를 유지 하는 방법을 알고 싶습니다 . 이것을 해결하는 방법을 알기 위해서는 이것이 중복되는 것보다 중요합니다.

@Lamb "G1 및 G2 폴더에서 선택 파일 (전체 폴더 내용이 아님) 만 아카이브 하시겠습니까?"

그것은 거의 모든 것을 말해 주지만 개선하려고 노력할 것입니다 : 선택한 파일 중 일부만 아카이브 로 옮기고 싶습니다 . 또한 각 파일의 경로 이름을 포함하여 이러한 파일 목록 이 있습니다.

따라서 SubDir1에는 10 개의 파일이 있으며 그중 3 개는 압축하고 SubDir1 \ sub2에는 5 개의 파일이 있고 5 개는 모두 압축하고 싶습니다. 보관해야하는 파일은 목록 파일에 있습니다.

중복 파일이있을 수 있으므로 하위 디렉토리를 추가하면 7-Zip에서 중복으로 볼 수 없습니다.

그리고 나는 커맨드 라인에서 그것을 좋아합니다.

다음과 같은 배치 파일을 시도했습니다.

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

이는 또한 33antique-shop.mp3 및 34antique-shop.mp3까지 01antique-shop.mp3, 02antique-shop.mp3, .... 파일을 보관하지 않아야 함을 의미합니다.

폴더 이름 (= 하위 디렉토리)이 MyArchive.7z에 추가되지 않았으므로 이것이 문제입니다.

분명히 하나의 특공대를 목록 파일과 함께 사용하고 싶지만 작동하지 않습니다.

난 노력 했어:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

실제로 선택하는 한 꽤 잘 작동하지만 디렉토리 구조는 유지하지 않습니다. 슬프게도

어떻게해야합니까?


G1 및 G2 폴더에서 선택 파일 (전체 폴더 내용이 아님) 만 아카이브 하시겠습니까?
Ankit

답변:


12

안정적인 최신 7-Zip (15.14) 버전에는 절대 경로 저장을 가능하게하는 스위치 -spf가 있습니다.

예를 들어, list.txt 파일

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

명령 7z a p.7z -spf @list.txt은 목록에있는 것처럼 절대 경로를 저장하는 아카이브를 생성합니다. 또는이 명령 7z a p.7z -spf2 @list.txt은 드라이브 문자를 제거합니다.

tmp\dir1\file.txt
tmp\dir2\file.txt

파일의 경우 List.txt 파일이 있습니다

dir1\file.txt
dir2\file.txt

이 명령 7z a p.7z @list.txt은 버전 9.20 및 15.14의 목록에있는 상대 경로를 저장합니다.

스위치 -spf로 더 많은 테스트를 수행했습니다. 결과는 여기에 있습니다 .


나는이 아이디어를 하루 동안 검색했습니다. 감사 !
Moshe L

9

다음을 사용하여 하위 디렉토리가있는 디렉토리를 아카이브하도록했습니다 .

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

7zA.exe에 직접 링크를 찾을 수 없습니다 (링크 당), 더 이상 사용되지 않고 7z.exe로 대체됩니까?
PrincessPooleRulz

@ user194767 : 7za.exe는 명령 줄 버전 입니다.
Karan

그리고 그것을 사용하고 싶지만 그 페이지에서 7-zip.org/download.html과 같은 것을 찾을 수 없습니다. 그래서, 분명히 : "어디서나 7zA.exe에 대한 직접 링크를 찾을 수 없습니다" 라는 의미에서 "이 무료 소프트웨어에 대한 직접 링크를 제공해주십시오!" 감사합니다!
PrincessPooleRulz

1
@ user194767 : 좋아, 여기 에 현재 버전이 있지만, 그 페이지 어디에서나 7-Zip Command Line Version 을 찾을 수 없다고 말하고 있습니까 ?!
Karan

7zA.exe를 사용할 수 없으므로 7z.exe를 사용해 보았습니다. -r 플래그가 무엇인지 확실하지 않지만 서브 디렉토리를 아카이브 할 필요는 없습니다.
Eric Roper 2013

7

대신 이것을 시도하십시오 :

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

문제는 사람들이 여러 경로 아카이브 옵션 을 수정 하는 것과 마찬가지로 적절한 경로 저장 옵션 을 몇 년 동안 요청 왔지만 저자는 관심이없는 것 같습니다. 이것이 WinRAR를 너무 많이 사용하기 시작한 이유의 일부입니다.


당신이 listfile을가있는 경우, 7 우편 번호는 것 없습니다 파일이 하나의 최상위 디렉토리를 공유하지 않는 보관하는 경우 경로를 저장합니다. 예를 들어 다음을 포함하는 Input.txt 가있는 경우 :

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

를 실행 7z a MyArchive.7z @Input.txt하면 경로가 완전히 벗겨져 나에게 완전히 거꾸로 보입니다 (OTOH rar a MyArchive.rar @Input.txt가 잘 작동합니다).

따라서 7-Zip의 결함을 극복하기 위해 다음과 같이 배치 파일을 사용할 수 있습니다.

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

참고 : 교체 D:\MyArchive.7z대상 아카이브 적절한 경로. 또한 배치 파일은 목록 파일에 경로를 인용했는지 여부에 관계없이 작동해야합니다.


편집 : 목록 파일 이 다음과 같은 경우

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

또는

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

그런 다음 대신 다음과 같이 편집하십시오.

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

아카이브 할 모든 파일이 아래에 있다고 가정하면 C:\$$-edriveC : \로 이동하여 실행하십시오 7z a C:\MyArchive.7z @C:\Input.txt. 목록 파일을 사용하면 드라이브 문자가없고 초기 백 슬래시가없고 최상위 (루트) 디렉토리가 모든 파일에 대해 동일한 경우 에만 경로가 저장 됩니다 . 또한 최상의 결과를 얻으려면 C : \ $$-edrive에서 MyArchive.7z를 만들지 않는 것이 좋습니다.


정답은 3/4입니다. RAR은 훌륭했지만 배치 파일은 그렇게 작동했습니다. 출력 결과는 다음과 같습니다. 파일 하나에 공백없이 파일 하나만 추가했습니다. 파일 이름은 __ C : \ Programs \ zippers \ 7-Zip> (공백 없음 : "C : \ c : \ Programs \ zippers \ 7-Zip \ 7z .exe ac : \ $$-edrive \ FGH.7z "$$-edrive \ G \ gattaca_7mp 3_zefen \ gattaca-03 the one moment.mp3" "popd) 7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009 스캔 아카이브 c : \ $$-edrive \ FGH.7z 업데이트 중 오류 : FGH.7z.tmp 파일을 열 수 없습니다. 액세스가 거부되었습니다. 시스템 오류 : 정의되지 않은 오류 ===== 가장 중요한 것은 액세스 거부 오류일까요?
PrincessPooleRulz

실제 목록 파일 에서 위의 질문에 몇 줄의 샘플 줄 (공백 포함 및 제외)을 추가 할 수 있습니까 ?
Karan

좋아, 그래서 나는 모든 공백을 파일 이름의 점으로 바꾸었지만 경로 이름은 바꾸지 않았습니다. 출력은 여전히 ​​다음과 같습니다. C : \ Programs \ zippers \ 7-Zip> (______ pushd c : _______ c : \ Programs \ zippers \ 7-Zip \ 7z.exe ac : \ $$-edrive \ FGH.7z "$$- edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-. starcraft.vs.south.park.mp3 "_______ popd________) ________ 아카이브 업데이트 중 업데이트 c : \ $$-edrive \ FGH.7z 오류 : 파일 FGH.7z.tmp 액세스를 열 수 없습니다 거부되었습니다. 시스템 오류 : 정의되지 않은 오류
PrincessPooleRulz

"파일 이름에서 모든 공백을 점으로 교체했습니다."-실제 파일의 이름을 바꾸거나 목록 파일을 편집 했습니까? 파일 이름과 경로 모두에 공백이 있어야합니다. 위의 편집 내용을 참조하십시오 (예 : 목록 파일에서 C : \를 제거하고 모든 경로를 따옴표로 묶으십시오). 이제 배치 파일 해결 방법 대신 7z를 직접 사용할 수 있습니다.
Karan

1. = = = = = = 2. 이름을 모두 바꿨습니다. 변경했지만 7z = = = = = = 3에서는 작동하지 않습니다. $$-edrive \는 실제로 유일한 최상위 디렉토리입니다. = = = = = 4. 오류 메시지 = = = = = 경고 파일 : = = = = = $$-edrive : 시스템에서 해당 파일을 찾을 수 없습니다. = = = = = = = = = = "$$-edrive : 시스템에서 해당 파일을 찾을 수 없습니다. = = = = = = = = = = 경고 : 2 개의 파일을 찾을 수 없습니다 = = = = = C : \ Programs 두 개의 경고 및 하나의 큰 따옴표로 두 번째 시작이 있다는 것을 \ 지퍼 \ 7-우편 번호는> = = = = = 음 ... 이상한?
PrincessPooleRulz

0

7-Zip은 파일을 무시하고 중복 된 것으로 간주하여 건너 뜁니다. 그 문제를 해결할 방법이 있다면 찾지 못했습니다. 항상 작업을 여러 아카이브로 나눕니다.


파일을 압축 파일로 압축하는 동안 폴더 구조를 유지하는 방법을 알고 있습니까? 그들은 이것이 기본이라고 말하지만 그렇지 않습니다.
PrincessPooleRulz

@ user194767-다음과 같은 명령 줄을 사용합니다. %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\temp여기서 ZDIR7-Zip 경로 ZIP이며 대상 드라이브입니다.
MT_Head

0

중복 문제를 해결하는 방법을 잘 모릅니다. 그러나 전체 명령이있는 배치보다 더 편리한 시스템은 listfile.txt를 만드는 것입니다.

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

그런 다음 7z a -r -tzip archive.zip @listfile.txt


0

totalcmd "tot-zip.bat"와 함께 사용할 bat 스크립트를 작성했습니다.

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

그런 다음 totalcmd에서 바로 가기를 만듭니다. 여기에 이미지 설명을 입력하십시오

그런 다음 일부 파일 / 폴더를 압축하고 관련 폴더 구조를 유지 %TOP_DIR%하려면 필요한 파일 (내부 %TOP_DIR%)을 선택 하고 버튼을 누르십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.