작업 디렉토리 변경

작업 디렉토리 변경

디렉토리를 압축하려고 합니다.

/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

또는 나처럼 tarlibarchive의 명령줄 인터페이스를 사용하는 것이 더 편할 수도 있습니다 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은 전체 경로(현재 경로 기준)를 저장합니다.

관련 정보