상위 디렉터리를 포함하지 않고 파일 압축

상위 디렉터리를 포함하지 않고 파일 압축

여러 파일이 포함된 폴더가 있습니다.

폴더

  • 아티팩트1.app
  • 아티팩트2.ext2
  • 아티팩트3.ext3
  • ...

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

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

이 명령에는 최종 zip의 폴더 디렉터리가 포함되어 있습니다. 어떤 팁이 있나요?

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

답변1

디렉터리를 지정하지 않고 모든 파일을 해당 이름으로 저장하려는 경우 이 옵션을 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심볼릭 링크는 저장되지 않습니다.

관련 정보