부모 디렉토리를 포함하지 않고 파일 압축


12

여러 파일이 들어있는 폴더가 있습니다

폴더

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

내 목표는 cd폴더 dir을 포함 하지 않고이 폴더 외부에서 파일을 압축하여 명령 을 사용 하지 않는 것입니다.

zip -r ./folder/artifact.zip ./folder/artifact1.app

이 명령은 최종 zip에 폴더 dir을 포함합니다. 힌트가 있습니까?

관련 질문 : 폴더 자체를 포함하지 않고 폴더의 내용을 압축


1
매뉴얼 페이지에서 -j적용되는 것처럼 보이고 모든 폴더를 ZIP 내의 단일 루트 레벨 디렉토리로 압축합니다. 그것은 당신이 찾고있는 것이 아닙니다. 그렇지 않습니까?
phyrfox

@phyrfox 아마도 그렇습니다. 확인해야합니다. 감사.
Lorenzo B

답변:


13

folder디렉토리 표시없이 이름으로 모든 파일을 저장 하려면 -j옵션을 사용할 수 있습니다 .

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

또는

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

서브 디렉토리에 파일이있는 경우 아카이브에 디렉토리 구성 요소가 없습니다 (예 : folder/subdir/foo로 아카이브에 저장 됨) foo.

그러나 디렉토리로 변경하는 것이 더 쉬울 것입니다. 괄호 방법과 거의 동일한 양의 타이핑입니다. 그렇게하면 하위 디렉토리에 파일을 포함 시키면 변경 한 디렉토리에서 상대 경로를 갖게됩니다 (예 : folder/subdir/foo로 저장 됨) subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

대화식 사용의 경우, 쉘이 zip명령 을 실행할 때 다른 디렉토리에 있다는 것을 인식하지 못하기 때문에 이런 방식으로 쉘 완료를 잃게됩니다 . 이를 해결하려면 cd명령을 별도로 발행하십시오 . 이전 디렉토리로 쉽게 돌아가려면 pushd및 을 사용할 수 있습니다 popd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

zip 파일에 저장된 경로를 완전히 제어하려면 심볼릭 링크 포리스트를 만들 수 있습니다. 별도의 지시 zip가없는 한 기호 링크를 저장하지 않습니다.


하위 디렉토리 ( folder) 에있는 모든 파일을 명시 적으로 나열 할 필요는 없습니다 . 와일드 카드 만 사용할 수 있습니다.zip -j folder/*
Jakub Kukul

쉘 확장에 의존한다는 것은 점 파일 (예 :) .profile이 아카이브에 포함되지 않음을 의미합니다 . 대신, 현재 작업 디렉토리를 변경하고 .아카이브 할 파일로 지정 하십시오.cd folder && zip -r ../folder.zip .
sheldonh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.