여러 파일이 들어있는 폴더가 있습니다
폴더
- 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
가없는 한 기호 링크를 저장하지 않습니다.