我一直被一个 Unix 命令行小问题困扰。
我有一个网站文件夹(4GB),我需要获取一份副本,但只有 .php、.html、.js 和 .css 文件(只有几百 kb)。
我理想地认为,有一种方法可以压缩或压缩整个文件夹,但只获取某些文件扩展名,同时保留子文件夹结构。这可能吗?如果可以,如何实现?
我确实尝试过进行整个压缩,然后遍历并排除某些文件,但这似乎有点过分。
我对 unix 有点陌生。
任何想法将不胜感激。
切换到网站文件夹,然后运行
zip -R foo.zip '*.php' '*.html' '*.js' '*.css'
您也可以从网站文件夹外部运行它:
zip -r foo.zip website_folder -i '*.php' '*.html' '*.js' '*.css'
您可以使用
find
和 grep
生成文件列表,然后将其通过管道传输到 zip
例如
find . | egrep "\.(html|css|js|php)$" | zip -@ test.zip
(
-@
告诉 zip 从 stdin 读取文件列表)
这就是我设法做到的,但我也喜欢ghostdog74的版本。
tar -czvf archive.tgz `find test/ | egrep ".*\.html|.*\.php"`
您可以通过将额外的扩展添加到正则表达式来添加它们。
你可能想使用 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 "{}" +;
之后就可以拉上拉链了
我喜欢 Nick 的回答,但是,既然这是一个编程站点,为什么不使用 Ant 来做到这一点呢? :)
然后你可以传入一个参数,以便可以压缩不同类型的文件。
您可以编写一个 shell 脚本来根据模式/表达式将文件复制到新文件夹中,压缩内容,然后删除该文件夹。现在,至于它的实际语法,我将其留给您:D.