개별적으로 찾은 파일을 동일한 폴더 구조로 패키지하는 방법은 무엇입니까?

개별적으로 찾은 파일을 동일한 폴더 구조로 패키지하는 방법은 무엇입니까?

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

관련 정보