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

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

폴더

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

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

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

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

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



답변

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가없는 한 기호 링크를 저장하지 않습니다.


답변