我的脚本--delete --delete-after
有rsync
.我有一个目录,其名称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
会将内容同步there
到here
但不创建目录there
。如果 OTOHMohsen
是子目录,您可以通过 - 选项排除它(和子树)--exclude
。
答案2
您的脚本应该已经完全按照您的要求执行:releases
完全忽略并且不在目标上删除它。
您可以更好地定义排除,将--exclude '/releases/'
其绑定到传输的顶层并将其定义为目录,但这在这里不是必需的。