答案1
从什么是可能在您的手册页中:
-r
--recurse-paths
Travel the directory structure recursively
-R
--recurse-patterns
Travel the directory structure recursively starting at the current directory
宽松地说,当您想要在特定目录下压缩文件时,以及当您想要在特定目录下压缩文件并且这些文件与标志后定义的模式匹配时zip -r
使用,正如您在该页面提供的示例中看到的那样。另外,默认情况下从当前目录启动。zip -R
-R
-R
例子:
zip -r foo foo1 foo2
First zips up foo1 and then foo2, going down each directory.
zip -R foo "*.c"
In this case, all the files matching *.c in the tree starting at the current
directory are stored into a zip archive named foo.zip. Note that *.c will
match file.c, a/file.c and a/b/.c. More than one pattern can be listed as
separate arguments.
答案2
两者都是递归的,您应该知道这一点,但-R
适用于模式而不是整个树。例如:
zip -R music "*.mp3"
它将从当前目录匹配所有以 结尾的文件.mp3
并压缩它们以保持结构:
➜ src zip -R amr "*.css"
adding: AMR/css/jquery.treeview.css (deflated 76%)
adding: AMR/css/importexport.css (deflated 43%)
adding: AMR/css/amr_style.css (deflated 82%)
adding: AMR/css/backsite.css (deflated 49%)
➜ AMR git:(develop) ✗ zip -R amr "*.css"
adding: css/jquery.treeview.css (deflated 76%)
adding: css/importexport.css (deflated 43%)
adding: css/amr_style.css (deflated 82%)
adding: css/backsite.css (deflated 49%)
-r
-i
如果您将其与或结合使用,则允许这样做-x
。
答案3
zip -r
需要一个路径(文件名有效,但无法添加-r
)
zip -R
期待一种模式。
例如,将从当前目录开始zip -r stuff.zip stuff*
递归压缩所有名称以 开头的目录。 shell 将 扩展为以 . 开头的所有文件/stuff
目录。如果您要引用,则只需查找名为的文件/目录并压缩该文件/文件夹(如果存在)。*
stuff
*
zip
stuff*
另一方面,zip -R stuff.zip "stuff*"
将压缩当前目录下所有名称以stuff
.请注意,该模式被引用,以便 shell 不会扩展它。如果您要删除引号,shell 会在到达之前将其展开zip
,因此 zip 会尝试查找并压缩名为stuff
.
如果当前工作目录中有一个名为的目录test
,其中有一个名为的文件stuff.txt
,则该文件将被添加到第二个示例中的 zip 中,因为文件名与模式匹配,无论包含目录的名称是什么。第一个示例不会拾取该文件,因为它只压缩以stuff
.