rsync 并删除其他目录

rsync 并删除其他目录

我的脚本--delete --delete-afterrsync.我有一个目录,其名称releases位于 basedir 的同一目录中rsync
我不想releases在每次运行脚本后删除目录。哪个选项rsync可以帮助我? 更新: 我的脚本rsync

#/bin/dash

fatal() {
  echo "$1"
  exit 1
}

warn() {
  echo "$1"
}

# Find a source mirror near you which supports rsync on
# https://launchpad.net/ubuntu/+archivemirrors
# rsync://<iso-country-code>.rsync.archive.ubuntu.com/ubuntu should always work
RSYNCSOURCE=rsync://archive.ubuntu.com/ubuntu

# Define where you want the mirror-data to be on your mirror
BASEDIR=/home/ubuntu/

if [ ! -d ${BASEDIR} ]; then
  warn "${BASEDIR} does not exist yet, trying to create it..."
  mkdir -p ${BASEDIR} || fatal "Creation of ${BASEDIR} failed."
fi

rsync --recursive --times --links --safe-links --hard-links \
  --stats \
  --exclude "Packages*" --exclude "Sources*" \
  --exclude "Release*" --exclude "InRelease" --exclude "releases" \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed."

rsync --recursive --times --links --safe-links --hard-links \
  --stats  --delete --delete-after --exclude "releases" \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed."

date -u > ${BASEDIR}/project/trace/$(hostname -f)

chown 997:997 /home/ubuntu/* -R

答案1

这些--delete选项仅涉及接收端存在的文件,而不涉及发送端存在的文件。从您的问题中尚不清楚,但听起来您Mohsen在发送端有指定的目录,然后该目录被同步。如果Mohsen是同步操作的根目录,您可以通过/在源路径中添加 来避免它。即rsync me@remote/path/there/ local/path/here会将内容同步therehere但不创建目录there。如果 OTOHMohsen是子目录,您可以通过 - 选项排除它(和子树)--exclude

答案2

您的脚本应该已经完全按照您的要求执行:releases完全忽略并且不在目标上删除它。

您可以更好地定义排除,将--exclude '/releases/'其绑定到传输的顶层并将其定义为目录,但这在这里不是必需的。

相关内容