如何 tar.gz *.php、*.txt、*.inc、*.js、*.css、*.php3 文件?

如何 tar.gz *.php、*.txt、*.inc、*.js、*.css、*.php3 文件?

我想备份我的服务器,但不想担心图像/视频等。

我怎样才能将我想要的所有这些类型的文件(基本上是文本文件)压缩为 tar.gz?

答案1

您可以使用寻找命令为大多数版本创建输入列表柏油

根据您使用的 Unix 类型,命令语法可能有所不同。例如,在 IBM AIX 上,命令语法可能如下所示:

$ cd /directory/you/want/to/archive
$ find . \( -name '*.php' -o \
            -name '*.txt' -o \
            -name '*.inc' -o \
            -name '*.js' -o \
            -name '*.css' -o \
            -name '*.php3' \) -print > /tmp/input.list
$ tar -c -L/tmp/input.list -f - | gzip -c > /path/to/backup.tar.gz

如果您有 GNU(/Linux) 实用程序,您可以执行以下操作:

$ cd /directory/you/want/to/archive
$ find . -regex '.*\.\(php\|txt\|inc\|js\|css\|php3\)' -print > /tmp/input.list
$ tar -c -z -T /tmp/input.list -f /path/to/backup.tar.gz

答案2

使用--exclude=PATTERN来自柏油

那将是“负枚举”。对于“正枚举”,您可以这样做:

find . -name "*.php" -o -name "*.txt" -o -name "*.inc" -o -name "*.js" -o -name "*.css" -o -name "*.php3" -print0 | xargs -0 tar zcvf backup.tar.gz

-print0-0用于带有空格的文件名。

答案3

答案4

如果您使用bash4zsh作为您的shell,您也可以执行此任务而不必借助find

首先,您需要启用花哨的文件通配符。在 Bash 中,可以按如下方式完成:

shopt -s extglob globstar

在Zsh中,对应的命令是:

setopt extendedglob

剩下的就简单多了:

tar zcvf archive.tgz /path/to/dir/**/*(*.php|*.txt|*.inc|*.js|*.css|*.php3)

**是一个递归通配符,匹配所有级别的子目录。括号称为glob 修饰符,并将前一个通配符的匹配限制*为也匹配*.php*.txt等之一的匹配。

相关内容