我有一个运行WHM / cPanel站点的CentOS服务器,很多这些站点运行WordPress。我想做一个自动备份,可以拉动并移动任何包含“上传内容”的帐户。文件夹进入备份目录。我知道还有其他解决方案,但大多数都希望您备份整个WordPress网站,但我只需要备份上传。
我对.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.zip文件?
我和exec和sed一起玩过,但我似乎无法解决这个问题。这是我得到的最好的 - 只是试图让它回应这个名字 - 但它不对。对不起,我对正则表达式很可怕:
find /home/ -type d -name uploads -exec sh -c 'string=`dirname $0` echo $string | sed `/\/home\/\(.*\)\/new\/wp-content\/uploads/`'{} \;
非常感谢有关如何解决此问题的任何帮助或指示。谢谢!
答案 0 :(得分:2)
您可以将Bash的globbing与*
一起使用来扩展所有不同的用户目录。
for uploads in /home/*/public_html/wp-content/uploads; do
IFS=/ read -r _ _ user _ <<<"$uploads"
zip -r /backup/uploads/${user}.zip "$uploads"
done
答案 1 :(得分: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
和/backup/uploads/home-user-wip-uploads.zip
的文件,而不是一个zip覆盖另一个