我正在尝试压缩目录
/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 不会更改根文件夹。它将把临时 zip 存档放在目录 /home/cryus 中,完成后将 sql.zip 复制到当前目录。此选项仅在更新现有存档时有用,并且包含此旧存档的文件系统没有足够的空间来同时保存新旧存档。
尝试使用:
-j 仅存储已保存文件的名称(丢弃路径),并且不存储目录名称。默认情况下,zip 将存储完整路径(相对于当前路径)。