zip을 사용하여 다른 위치의 파일을 패키징하는 경우, 예를 들면 다음과 같습니다.
zip pack.zip /home/jack/jack.txt /home/jim/jim.txt
이러한 파일은 다음 구조로 "pack.zip"에 저장됩니다.
./home/jack/jack.txt
./home/jim/jim.txt
그러나 이것은 내가 기대했던 것이 아닙니다. 다음과 같이 파일을 zip 파일의 루트에 저장하고 싶습니다.
./jack.txt
./jim.txt
어떻게 해야 합니까?
답변1
-j
(정크) 경로를 제거하려면 zip 옵션을 사용하십시오 .
-j
--junk-paths는
디렉터리 이름이 아닌 저장된 파일(정크 경로)의 이름만 저장합니다. 기본적으로 zip은 전체 경로(현재 디렉터리 기준)를 저장합니다.
예
예를 들어 다음과 같은 파일이 있다고 가정해 보겠습니다.
$ ls */
a/:
file
b/:
file2
다음 명령을 사용하여 압축합니다 -j
.
$ zip -j new.zip */*
adding: file (stored 0%)
adding: file2 (stored 0%)
그들은 저장되어 있다아니요길:
$ unzip -l new.zip
Archive: new.zip
Length Date Time Name ("^" ==> case
--------- ---------- ----- ---- conversion)
0 2014-10-21 22:15 file
0 2014-10-21 22:14 file2
--------- -------
0 2 files
기본 이름이 동일한 파일은 오류를 생성합니다.
-j
다른 경로의 두 파일이 동일한 이름을 갖는 경우 다음을 사용할 때 오류가 발생합니다 .
$ zip -j new2.zip */*
zip warning: first full name: a/file
second full name: b/file
name in zip file repeated: file
this may be a result of using -j
zip error: Invalid command arguments (cannot repeat names in zip file)
답변2
zip 유틸리티에는 다음과 같은 옵션이 있습니다 --junk-path
.
$ zip --junk-path pack.zip home/jack/jack.txt home/jim/jim.txt
adding: jack.txt (stored 0%)
adding: jim.txt (stored 0%)
$ unzip -l pack.zip
Archive: pack.zip
Length Date Time Name
--------- ---------- ----- ----
0 2014-10-22 07:12 jack.txt
0 2014-10-22 07:12 jim.txt
--------- -------
0 2 files