有很多关于这个的帖子,我知道,但我尝试了所有但仍然无法使其正常工作。
如果这是我要备份的文件夹:/home/user/thingstobackup
该脚本将在此处和另一个名为“今天”日期的文件夹中创建一个“备份”文件夹。每日备份都在里面复制。
无论我如何使用rsync,“backup”文件夹将始终从第二次运行脚本开始复制到自身内。
第一轮:
/home/user/thingstobackup
/home/user/thingstobackup/backup/2016-01-13 #and correct file inside
第二轮:
/home/user/thingstobackup/backup/2016-01-13 #with correct file inside
/home/user/thingstobackup/backup/2016-01-14 #with correct file inside
我会缩短这里的路径..
../backup/2016-01-14/2016-01-13/and backed up file inside..
../backup/2016-01-14/backup/
../backup/2016-01-14/backup/2016-01-13/and backed up file inside..
../backup/2016-01-14/backup/2016-01-14/empty
第二次运行后,备份文件夹将复制到每个备份文件夹中。
剧本:
#!/bin/bash
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# directory to backup
TOSAVE=/home/user/thingstobackup
TODAY=`date +%F`
BDIR=backup
BACKUPDIR=$TOSAVE/$BDIR/$TODAY/
# options for rsync
OPTS="-aq --exclude='backup/*'"
# find daily new file
FIND="`find $TOSAVE -mindepth 1 -mtime -1 -print`"
# MAIN #
# copy daily found inside new created daily folder
[ -d $TOSAVE/$BDIR/$TODAY ] || mkdir -p $TOSAVE/$BDIR/$TODAY
rsync $OPTS $FIND $BACKUPDIR
# delete file older than 2 weeks = 14 days
find $TOSAVE -mtime +14 -exec rm -rf {} \;
无论我如何使用--exclude='backup/*'"
--exclude='backup'
|| --exclude 'backup/*'
|| --exclude 'backup'
它不排除该文件夹..是的我读了rsync手册:--exclude=PATTERN exclude files matching PATTERN
我确定我错过了一些东西,但我找不到它!先谢谢你的伙伴
答案 0 :(得分:0)
我不知道为什么--exclude在这里不起作用..但我修改了find命令,我设法让这个东西工作。
ResourceLeakDetector.setLevel(PARANOID)
答案 1 :(得分:0)
#define RUNDE(n) ( K ^= Q[n], y = K, K = F(K) ^ xR, xR = y )
无论本地文件说明符是cd -- "$(mktemp --directory)"
mkdir foo bar
touch foo/foo bar/bar
other="$(mktemp --directory)"
rsync --recursive --exclude 'foo' * "$other"
ls "$other" # prints only "bar"
(如上所述),*
还是./*
,以及/tmp/tmp.MGUbytm0h0/*
是$PWD
还是其他内容,这都有效。
答案 2 :(得分:0)
您应该能够通过不在选项周围添加引号或包含空格而不是使用--exclude
来解决=
问题; rsync
关于如何编写选项非常特别:
--exclude=backup
替代:
--exclude '*dir'
其他建议:
/
)$( ... )
而不是反引号(如果可用/可能)$BACKUPDIR
但只能有效地使用它一次)--verbose
选项,这对rsync 修改后的脚本:
#!/bin/env bash
# export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# directory to backup
TOSAVE=$HOME/thingstobackup
TODAY=$(date +%F)
BDIR=backup
BACKUPDIR=$TOSAVE/$BDIR/$TODAY
# options for rsync
OPTS="-raq --exclude=$BDIR --exclude=$TODAY"
# find daily new file
FIND=$(find $TOSAVE -mindepth 1 -mtime -1 -print)
# MAIN #
# copy daily found inside new created daily folder
[ -d $BACKUPDIR ] || mkdir -p $BACKUPDIR
rsync $OPTS $FIND $BACKUPDIR
# delete file older than 2 weeks = 14 days
find $TOSAVE -mtime +14 -exec rm -rf {} \;
大多数更改都是为thingstobackup
构建路径的方式:
file1
file2
file3
运行脚本后会显示如下:
file1
file2
file3 // files that will be included to rsync destination
|
|_______backup // exclude=$BDIR should not be included
|
|________2016-01-14 // exlude=$TODAY would also be advised
file1
file2
file3
编辑:为了让rsync在遇到包含空格的文件名时不会中断,您需要在find
方法中处理它。
*你可以通过使用rsync命令而不是find
来进一步优化你的脚本,但我会把它留给你。