rsync
# 递归复制文件
rsync -r source destination
# 复制所有信息,可以代替 -r
rsync -a source destination
# 文件夹同步(会删除不存在于 source 文件夹中的内容)
rsync -av --delete source destination
# 文件夹同步
# /wangzhy/blog/build/ 源目录,注意末尾的 / ,这表示复制的是目录的内容,不是目录本身
# /wangzhy/blog/release/ 目标目录
rsync -av --delete /wangzhy/blog/build/ /wangzhy/blog/release/
# 排除文件
rsync -av --exclude='*.txt' source destination
# 只同步 txt 文件
rsync -av --include="*.txt" --exclude='*' source/ destination
# 增量备份
rsync -a --delete --link-dest /compare/path /source/path /target/path
服务器备份
rsync -av --exclude='mongo-data' --exclude='es_data' --exclude='node_modules' /wangzhy/blog aliyun:/wangzhy/
rsync -av /wangzhy/gitrepo aliyun:/wangzhy/
备份用户的主目录。
#!/bin/bash
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"