디렉토리를 압축하려고 합니다.
/home/cyrus/sql
폴더를 압축할 때 작업 디렉터리를 변경하고 싶습니다.
/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql
하지만 zip 파일을 확인하면 다음과 같습니다.
/ $ unzip -l sql.zip
Archive: sql.zip
Length Date Time Name
--------- ---------- ----- ----
0 2013-05-30 10:59 home/cyrus/sql/
1776642 2013-05-23 10:22 home/cyrus/sql/wordpress.sql
--------- -------
1776642 2 files
루트 폴더는 이어야 합니다 sql
. 내가 뭘 잘못하고 있는 걸까요?
답변1
zip
특정 디렉터리의 내용을 가져오고 zip
현재 디렉터리에 파일을 저장 하려면 다음과 같이 작성할 수 있습니다.
(cd /some/dir && zip -r - dir-there) > file.zip
또는 나처럼 tar
libarchive의 명령줄 인터페이스를 사용하는 것이 더 편할 수도 있습니다 bsdtar
.
bsdtar -cvf file.zip --format=zip -C /some/dir dir-there
답변2
에서 man zip
:
-b path --temp-path path
임시 zip 아카이브에 대해 지정된 경로를 사용하십시오. 예를 들어:
zip -b /tmp stuff *
임시 zip 아카이브가 /tmp 디렉토리에 배치되고 완료되면 stuff.zip이 현재 디렉토리에 복사됩니다. 이 옵션은 기존 아카이브를 업데이트할 때 유용하며 이 이전 아카이브가 포함된 파일 시스템에 이전 아카이브와 새 아카이브를 모두 저장할 공간이 부족합니다. 특정 상황에서 데이터 설명자가 필요하지 않도록 스트리밍할 때 유용할 수도 있습니다. 이 옵션을 사용하면 아카이브 파일을 대상 파일 시스템에 복사하는 데 추가 시간을 소비하기 위해 zip이 필요할 수 있습니다.
기본적으로 zip
전체 경로는 현재 디렉터리를 기준으로 저장됩니다. zip 파일의 디렉터리가 루트가 되도록 하려면 해당 디렉터리에서 명령을 실행 sql
해야 합니다 ./home/cyrus
답변3
압축하려는 폴더를 현재 디렉터리에 심볼릭 링크하는 것이 더 쉬울 수 있습니다. 이렇게 하면 가만히 있을 수 있습니다.
ln -s /path/to/whatever .
zip -r myzip whatever
원하는 경우 기호 링크를 제공할 수 있습니다.
답변4
내가 올바르게 이해했는지 확실하지 않지만 -b는 루트 폴더를 변경하지 않습니다. /home/cryus 디렉토리에 임시 zip 아카이브를 배치하고 완료되면 sql.zip을 현재 디렉토리에 복사합니다. 이 옵션은 기존 아카이브를 업데이트할 때만 유용하며, 이 이전 아카이브를 포함하는 파일 시스템에는 이전 아카이브와 새 아카이브를 모두 보관할 공간이 부족합니다.
다음을 사용해 보세요:
-j 디렉토리 이름이 아닌 저장된 파일의 이름만 저장합니다(경로 무시). 기본적으로 zip은 전체 경로(현재 경로 기준)를 저장합니다.