分别GZip每个文件

Ton*_*nio 34 linux bash gzip

我们如何分别GZip每个文件?

我不想把所有文件都放在一个大焦油中.

Cou*_*ner 65

您可以使用 gzip *


注意:

  • 这将单独压缩每个文件并删除原始文件.
  • 使用-k(--keep)选项保留原始文件.
  • 如果由于shell的限制而有大量文件,这可能无效
  • 要并行运行gzip,请参阅下面的@MarkSetchell的答案.


Mar*_*ell 34

简单而快速的答案将并行使用所有CPU内核:

parallel gzip ::: *
Run Code Online (Sandbox Code Playgroud)

GNU Parallel是一个非常棒的工具,应该在这个世界中使用得更多,在这个世界中,CPU只获得更多内核而不是更快的速度.有大量的例子,我们都会做好10分钟阅读... 这里

  • @Californian 当然`找到。-名称 XYZ -print0 | 并行-0 gzip` (2认同)

lee*_*sky 18

七年后,这个高度评价的评论仍然没有自己的全面答案,所以我现在正在推广:

gzip -r .

这比当前接受的答案有两个优点:如果存在任何子目录,它将递归地工作,并且Argument list too long如果文件的数量非常大,它将不会失败.

  • 如果你想保留原始文件,请添加“-k”。 (2认同)

Bud*_*ddy 13

如果你想递归地gzip每个文件,你可以使用find piped to xargs:

$ find . -type f -print0 | xargs -0r gzip
Run Code Online (Sandbox Code Playgroud)

  • 无需查找+ xargs.Gzip本身可以处理递归:`gzip -9r .` (10认同)
  • 一如既往,`找到.-type f -print0 | xargs -0r gzip`更好. (2认同)

Fed*_*rgi 5

尝试循环

$ for file in *; do gzip "$file"; done
Run Code Online (Sandbox Code Playgroud)


小智 5

或者,如果您有 pigz(在多个处理器和内核上并行压缩的 gzip 实用程序)

pigz *
Run Code Online (Sandbox Code Playgroud)