如何在 UNIX 中压缩整个文件夹树,但只压缩某些文件?

问题描述 投票:0回答:6

我一直被一个 Unix 命令行小问题困扰。

我有一个网站文件夹(4GB),我需要获取一份副本,但只有 .php、.html、.js 和 .css 文件(只有几百 kb)。

我理想地认为,有一种方法可以压缩或压缩整个文件夹,但只获取某些文件扩展名,同时保留子文件夹结构。这可能吗?如果可以,如何实现?

我确实尝试过进行整个压缩,然后遍历并排除某些文件,但这似乎有点过分。

我对 unix 有点陌生。

任何想法将不胜感激。

unix zip
6个回答
138
投票

切换到网站文件夹,然后运行

zip -R foo.zip '*.php' '*.html' '*.js' '*.css' 

您也可以从网站文件夹外部运行它:

zip -r foo.zip website_folder -i '*.php' '*.html' '*.js' '*.css'

43
投票

您可以使用

find
grep
生成文件列表,然后将其通过管道传输到
zip

例如

find . | egrep "\.(html|css|js|php)$" | zip -@ test.zip

-@
告诉 zip 从 stdin 读取文件列表)


7
投票

这就是我设法做到的,但我也喜欢ghostdog74的版本。

tar -czvf archive.tgz `find  test/ | egrep ".*\.html|.*\.php"`

您可以通过将额外的扩展添加到正则表达式来添加它们。


4
投票

你可能想使用 find(GNU) 来查找所有 php、html 等文件。然后将它们打包

find /path -type f \( -iname "*.php" -o -iname "*.css" -o -iname "*.js" -o -iname "*.ext" \) -exec tar -r --file=test.tar "{}" +;

之后就可以拉上拉链了


4
投票

我喜欢 Nick 的回答,但是,既然这是一个编程站点,为什么不使用 Ant 来做到这一点呢? :)

然后你可以传入一个参数,以便可以压缩不同类型的文件。

http://ant.apache.org/manual/Tasks/zip.html


1
投票

您可以编写一个 shell 脚本来根据模式/表达式将文件复制到新文件夹中,压缩内容,然后删除该文件夹。现在,至于它的实际语法,我将其留给您:D.

© www.soinside.com 2019 - 2024. All rights reserved.