我想备份我的服务器,但不打扰图像/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用于包含空格的文件名。
如何焦油可能会帮助你
如果你使用bash4或zsh作为你的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等匹配的匹配项。