【问题标题】:How to gzip files and keep original extension?如何压缩文件并保留原始扩展名?
【发布时间】:2014-06-20 21:11:28
【问题描述】:

似乎如果我运行gzip somefile.js,我会得到somefile.js.gz 作为输出。

但是,我需要保留原始文件扩展名,即somefile.js,我需要它在压缩后保留somefile.js

我该怎么做?

编辑:需要明确的是,我需要为几十个文件执行此操作,所以我不能只 mv 每个文件。我只是想将所有静态 css/js 文件 gzip,然后将它们上传到我的 CDN,这样我就可以将它们作为常规 js/css 文件提供。

【问题讨论】:

  • mv somefile.js.gz somefile.js??
  • 需要知道。 为什么你想要这个? gz 扩展名表示文件已被 gzip 压缩,使用前需要 gunziped。
  • 是的。将其从 .js.gz 重命名为 .js 并不会神奇地使其成为 javascript 文件...
  • @ElGavilan 我正在尝试压缩一百多个文件,因此对每个文件进行 mv 处理是不切实际的。
  • @Jongware 这样我就可以将压缩后的文件上传到我的 CDN 并将它们作为普通的 js/css 文件提供。

标签: linux bash shell gzip


【解决方案1】:

如果您真的想要这样做,您可以简单地使用几乎每个 shell 中都存在的 for 构造(甚至在 cmd.exe 上!)。在 Bourne 或 Posix sh 风味中,它给出了

for file in *.js *.css ; do gzip "$file" ; mv "$file.gz" "$file"; done

在 Windows cmd.exe 中它应该写(假设你的路径中有一个 gzip 命令):

for %file in (*.js *.css) do gzip %file && move %file.gz %file

但是注意:正如其他人警告你的那样,你将拥有名为foo.jsfee.css 的二进制gzip 文件。如果您将它们提供给标准浏览器,它肯定行不通!

请务必在尝试之前制作备份副本 - 它可以很容易地撤消,但您至少可能会浪费时间......

编辑:按照 gniourf_gniourf 的建议在 shell 命令中添加引号

【讨论】:

  • 只是为了好玩:可以让它在多个文件夹上递归工作吗?
  • @Jongware :如果您使用的是 shell,find 是您递归的朋友。您应该查看 that question 以获取参考(并且 man find ...)。在这里它会给出(注意:没有真正测试过):find . \( -name *.js -o -name *.css \) -type f -printf "gzip \"%p\" ; mv \"%p.gz\" \"%p\" \n" | sh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多