压缩目录中的所有文件?

压缩目录中的所有文件?

有没有办法使用命令压缩给定目录中的所有文件zip?我听说过使用*.*,但我希望它也适用于无扩展名文件。

答案1

你可以只使用*;没有必要*.*。文件扩展名在 Unix 上并不特殊。*匹配零个或多个字符——包括一个点。所以它匹配foo.png,因为这是零个或多个字符(确切地说是七个)。

请注意,*默认情况下不匹配以点开头的文件(也不匹配*.*)。这通常就是您想要的。如果没有,在 bash 中,如果你shopt -s dotglob会(但仍会排除...)。其他 shell 有不同的方式(或根本没有)包含点文件。

或者,zip还有一个-r(递归)选项可以一次执行整个目录树(并且不必担心点文件问题):

zip -r myfiles.zip mydir

其中mydir是包含您的文件的目录。请注意,生成的 zip 将包含目录结构和文件。正如 peterph 在他的评论中指出的那样,这通常被视为一件好事:提取 zip 会将所有提取的文件整齐地存储在一个子目录中。

-j您还可以使用/选项告诉 zip 不要存储路径--junk-paths

zip命令附带文档,告诉您其所有(许多)选项;键入man zip以查看该文档。这并不是 zip 所独有的。您可以通过这种方式获取大多数命令的文档。

答案2

就我而言,我想将每个文件压缩到其自己的存档中,因此我执行了以下操作(在 中zsh):

$ for file in *; do zip ${file%.*}.zip $file; done

答案3

另一种方法是使用 find 和 xargs: (这可能在 zip 中包含一个“.”目录,但它仍然应该正确提取。根据我的测试,zip 在压缩之前去掉了点) find . -type f -exec zip zipfile.zip {} +

(如果您的版本不支持exec 的结尾,+则可以替换为。不过它会更慢......)\;find+

默认情况下,这将包括所有子目录。在 GNU find 上-maxdepth可以防止这种情况。

答案4

不是.zip文件,而是gzip *一个简短的命令,它将目录中的每个文件压缩为自己的文件.gz并删除原始文件。在许多情况下确实很方便,因为许多其他工具可以直接处理.gz文件。

user@computer:~/test$ touch test1.txt
user@computer:~/test$ touch test2.txt
user@computer:~/test$ touch test3.txt
user@computer:~/test$ ls
test1.txt  test2.txt  test3.txt
user@computer:~/test$ gzip *
user@computer:~/test$ ls
test1.txt.gz  test2.txt.gz  test3.txt.gz

相关内容