하위 폴더가없는 여러 파일로 zip을 만드는 방법은 무엇입니까? 및 d4를 포함하는 zip을 만들고 싶습니다. . ├── d0 ├──

초기 상황 :

.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

내가해야 할 일:

다음 구조를 가져야하는 d0, d1 및 d4를 포함하는 zip을 만들고 싶습니다.

.
├── d0
├── d1
└── d4

내가 이미 시도한 것 :

나는 그것을 시도했다 zip myfiles d0 f1/d1 f2/f3/d4. 그러나 이것은 원래 폴더 구조를 유지합니다. 원하는 것은 아닙니다.

.
├── d0
├── f1
│   └── d1
└── f2
    └── f3
        └── d4

질문
하위 폴더없이 여러 파일로 zip을 만드는 방법은 무엇입니까?



답변

수동으로 zip 파일을 작성하고 업데이트 할 수 있습니다.

zip myfiles d0
(cd f1; zip -u ../myfiles.zip d1)
(cd f2/f3; zip -u ../../myfiles.zip d4)

괄호는 서브 쉘을 작성하고 서브 쉘에서 cd마지막 것의 영향 만으로 cd원래 디렉토리 로 돌아갈 필요가 없습니다 .

경우 d1, d2등 실제로 파일이 아닌 디렉토리 자체가, 다음 사용 -j옵션 :

-j
–junk-paths
저장된 파일의 이름 만 저장하고 (경로를 정크) 디렉토리 이름은 저장하지 마십시오. 기본적으로 zip은 현재 디렉토리에 상대적인 전체 경로를 저장합니다.


답변

당신이 사용할 수있는 find파일 목록을 얻을하고 실행 zip -j myfiles경로를 무시하고 그들을 팩 :

find . -name "d[014]" -exec zip -j myfiles {} +

$ tree
.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

$ find . -name "d[014]" -exec zip -j myfiles {} +
  adding: d1 (stored 0%)
  adding: d4 (stored 0%)
  adding: d0 (stored 0%)

$ unzip -l myfiles.zip
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-09 10:47   d1
        0  2017-10-09 10:48   d4
        0  2017-10-09 10:47   d0
---------                     -------
        0                     3 files

그러나 이것은 파일에서만 작동하며 디렉토리는 무시됩니다 zip -j. 너무 디렉토리에 대해이 작업을 얻으려면, 우리는 포장하고 싶은 말은 d0, d1전체 f3위의 예에서 디렉토리는 find라인이 좀 더 복잡해진다 :

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} +
        zip warning: /home/dessert/myfiles.zip not found or empty
  adding: d1 (stored 0%)
  adding: f3/ (stored 0%)
  adding: f3/d3 (stored 0%)
  adding: f3/d2 (stored 0%)
  adding: f3/d4 (stored 0%)
  adding: d0 (stored 0%)
$ unzip -l myfiles.zip
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-11 10:18   d1
        0  2017-10-11 10:19   f3/
        0  2017-10-11 10:19   f3/d3
        0  2017-10-11 10:19   f3/d2
        0  2017-10-11 10:19   f3/d4
        0  2017-10-11 10:17   d0
---------                     -------
        0                     6 files

답변

-j 옵션을 사용하면 파일에서 경로가 제거됩니다.

zip -j myfiles d0 f1/d1 f2/f3/d4

참고