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

我想备份我的服务器,但不打扰图像/video等

我怎么能tar.gz所有这些types的文件我想要的(基本上是文本文件)?

您可以使用find命令为大多数tar版本创build一个input列表。

根据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 

从tar中使用--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用于包含空格的文件名。

如何焦油可能会帮助你

如果你使用bash4zsh作为你的shell,你也可以执行这个任务而不求助于find

首先,你需要启用奇特的文件通配符。 在Bash中,可以这样做:

shopt -s extglob globstar

在Zsh中,相应的命令是:

setopt extendedglob

其余的是一块蛋糕:

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

**是一个recursion通配符 ,它匹配所有级别的子目录。 括号称为glob修饰符 ,并将前面*通配符的匹配限制为与*.php*.txt等匹配的匹配项。