gzip 具有特定扩展名的所有文件

Sad*_*dik 14 gzip

我正在尝试 gzip ubuntu 上所有文件扩展名为 .css、.html 或 .js 的文件。在顶级目录和所有子目录中。我想保留原始文件并覆盖 .gz 文件(如果已经存在)。

所以当我有 n 个文件时,我想保留这 n 个文件并创建额外的 n 个存档文件。不止一个。

我的尝试是运行一个如下所示的脚本:

gzip -rkf *.css
gzip -rkf *.html
... one line for each file extension
Run Code Online (Sandbox Code Playgroud)

第一:对于我想要 gzip 的每个文件扩展名,我需要在该脚本中有一行。没关系,但我希望找到更好的方法

其次,更重要的是:它不起作用。虽然 -r 应该完成这项工作,但子目录没有改变。gzip 文件仅在顶级目录中创建。

我在这里缺少什么?

顺便说一句:以下是详细输出中的错误,对吗?使用 -k 和 -v 选项时

-k, --keep        keep (don't delete) input files
-v, --verbose     verbose mode
Run Code Online (Sandbox Code Playgroud)

详细输出说它替换了文件,尽管“替换”意味着替换后原始文件不存在。无论如何,这只是输出的东西。

$ ls
  index.html      subdir1  testfile      testfile.css.gz
  javaclass.java  subdir2  testfile.css
$ gzip -fkv *.css
  testfile.css:   6.6% -- replaced with testfile.css.gz
$ ls
  index.html      subdir1  testfile      testfile.css.gz
  javaclass.java  subdir2  testfile.css
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 16

我会用

find /path/to/dir \( -name '*.css' -o -name '*.html' \) -exec gzip --verbose --keep {} \;
Run Code Online (Sandbox Code Playgroud)

如果您想不区分大小写地匹配扩展名(即包含和/或扩展名),请更改name为。如果要从当前目录开始递归搜索,则可以省略。iname.CSS.HTML/path/to/dir

  • 对于那些可能想知道 `--keep` 开关的人来说,是的,它会导致原始文件被保留。如果您希望它们在 gzip 压缩后被删除,请省略它。 (2认同)

小智 8

你可以用 for 循环来找到每个文件然后压缩它:

for i in `find | grep -E "\.css$|\.html$"`; do gzip "$i" ; done
Run Code Online (Sandbox Code Playgroud)


cha*_*aos 5

要获取文件列表:

find -type f | grep -P '\.js|\.html|\.css'
Run Code Online (Sandbox Code Playgroud)

并 gzip 所有这些文件:

find -type f | grep -P '\.js|\.html|\.css' | tar cvzf archive.gz -T -
Run Code Online (Sandbox Code Playgroud)

  • @Jos no 使用 `-T` 选项 `tar` 将输入处理为文件名。 (2认同)