2014-07-17 80 views
3

我有一个运行WHM/cPanel站点的CentOS服务器,并且很多这些站点运行WordPress。我想做一个自动备份,将包含“uploads”文件夹的任何帐户压缩并移动到备份目录中。我知道还有其他解决方案,但大多数人希望你备份整个WordPress网站,但我只需要备份上传。Bash脚本备份服务器上传文件夹

我对.sh脚本不是很好,并且花了很多时间来解决这个问题,但是我似乎找不到任何类似的例子让我成功。我的主要问题是在帐户后命名zip。大多数上传文件夹

位置(USER1是改变帐户):

/home/user1/public_html/wp-content/uploads /home/user2/public_html/wp-content/uploads /home/user3/public_html/wp-content/uploads

脚本示例:

find /home/ -type d -name uploads -exec sh -c 'zip -r /backup/uploads/alluploads.zip `dirname $0`/`basename $0`' {} \;

这种方法的问题是,这一切都写入一个zip文件。我怎样才能改变这一点,以保存每个用户上传到那里拥有user1-uploads.z​​ip文件?

我玩过exec和sed,但我似乎无法弄清楚。这是我得到的最好的 - 只是试图让它回应这个名字 - 但它是不正确的。对不起,我不善于用正则表达式:

find /home/ -type d -name uploads -exec sh -c 'string=`dirname $0` echo $string | sed `/\/home\/\(.*\)\/new\/wp-content\/uploads/`'{} \;

希望得到有关如何解决这一问题的任何帮助或方向。谢谢!

+0

这似乎是你的第一个关于堆栈溢出的问题。关于清晰性,简洁性和代码示例的荣誉。 – Joe

回答

1

一对夫妇的解决方案浮现在脑海中,你可以通过用户目录循环:

cd /home 
for udir in *; do 
    find /home/$udir -type d -name uploads -exec sh -c 'zip -r /backup/uploads/'"$udir"'-uploads.zip `dirname $0`/`basename $0`' {} \; 
done 

或使用cut来获取路径的第二个元素:

find /home/ -type d -name uploads -exec sh -c 'zip -r /backup/uploads/`echo "$0" | cut -d/ -f 2`-uploads.zip `dirname $0`/`basename $0`' {} \; 

虽然这两种会遇到问题,如果用户有多个目录下的任何地方,他们的名字是uploads

你可能会用tr简单地用其他字符替换路径分隔符,所以你最终与每个uploads目录中的单独ZIP:

find /home/ -type d -name uploads -exec sh -c 'zip -r /backup/uploads/`echo $0 | tr "/" "-"`.zip `dirname $0`/`basename $0`' {} \; 

所以你最终会命名/backup/uploads/home-user-wp-content-uploads.zip WIL文件,而不是/backup/uploads/home-user-wip-uploads.zip一个拉链覆盖其他

+0

感谢此 - 我喜欢用破折号替换斜线的想法,因此,如果备份位于正​​常位置,它的位置非常明显。有没有简单的方法来摆脱家中的第一个破折号,我得到它保存为'/备份/ uploads/-home-user-wp-content-uploads.z​​ip',因为/ home/- 否则它完美适合我的需求。 – sucramv

+0

你可以'cd /'和'找回家.....''那么就不会有前导斜杠,或用'sed -e“s = ^/==; s =/= - = g”'替换'tr“/”“ - ”'来删除前导斜杠 – Joe

2

您可以使用Bash与*通配来展开所有不同的用户目录。

for uploads in /home/*/public_html/wp-content/uploads; do 
    IFS=/ read -r _ _ user _ <<<"$uploads" 
    zip -r /backup/uploads/${user}.zip "$uploads" 
done 
+0

你,这也是一个很好的解决方案,正是我所要求的。 – sucramv