我想备份我的服务器,但不想担心图像/视频等。
我怎样才能将我想要的所有这些类型的文件(基本上是文本文件)压缩为 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
如果您使用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)
这**
是一个递归通配符,匹配所有级别的子目录。括号称为glob 修饰符,并将前一个通配符的匹配限制*
为也匹配*.php
、*.txt
等之一的匹配。