通过 find , tar 对多个文件进行打包

服务器上放了几个小站,计划打包备份一下,通过一句命令,分别打包压缩每个一个网站。

 find /data/website -maxdepth 1 -type d  -name "www*" \
 -exec sh -c 'tar  -czf "{1##/data/website/}.tar.gz"\
 --transform="s,data/website/,,"  "1"' _ {} \;

命令含义

这个命令的作用是在/data/website目录下查找深度为 1(即只在当前层级查找)、类型为目录且名称以 “www” 开头的所有目录,并对每个找到的目录执行一个命令来进行打包压缩。

以下是对命令的详细解释:

find

find /data/website -maxdepth 1 -type d -name "www":
find命令用于在指定目录中查找文件和目录。
/data/website是查找的起始目录。
-maxdepth 1表示只在当前目录层级查找,不深入子目录。
-type d指定查找的类型为目录。
-name "www
"表示查找名称以 “www” 开头的目录。

-exec 是find的一个参数,表示对查找到的结果,执行命令

-exec sh -c 'tar -czf "{1##/data/website/}.tar.gz" --transform="s,data/website/,," "1"' _ {} \;:
-exec选项用于对找到的每个文件或目录执行指定的命令。
sh -c表示执行一个 shell 命令。
tar -czf "{1##/data/website/}.tar.gz":使用tar命令进行压缩,生成的压缩文件名是去掉/data/website/前缀后的目录名加上.tar.gz后缀。例如,如果找到的目录
是/data/website/www_example,则生成的压缩文件名为www_example.tar.gz。

--transform="s,data/website/,,":在压缩过程中,使用sed风格的替换表达式,将路径中的data/website/替换为空,从而在压缩文件中不包含这个路径部分。
"1"表示find命令找到的目录路径,作为tar命令的参数传入。
_ {}中的_是一个占位符,{}表示find命令找到的当前文件或目录,在这个命令中代表找到的以 “www” 开头的目录。
\;表示-exec选项的结束标志。