Bash rsync——排除';文件夹';,还是复制那个文件夹
我知道有很多关于这方面的帖子,但我都试过了,还是没能让它工作 如果这是我要备份的文件夹:Bash rsync——排除';文件夹';,还是复制那个文件夹,bash,find,backup,rsync,Bash,Find,Backup,Rsync,我知道有很多关于这方面的帖子,但我都试过了,还是没能让它工作 如果这是我要备份的文件夹:/home/user/thingstobackup 脚本将在此处和另一个名为date of today的文件夹中创建一个“备份”文件夹。每日备份在内部复制 无论我如何使用rsync,“备份”文件夹都将从脚本的第二次运行开始复制到自身内部 第一次运行: /home/user/thingstobackup /home/user/thingstobackup/backup/2016-01-13 #and corre
/home/user/thingstobackup
脚本将在此处和另一个名为date of today的文件夹中创建一个“备份”文件夹。每日备份在内部复制
无论我如何使用rsync,“备份”文件夹都将从脚本的第二次运行开始复制到自身内部
第一次运行:
/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排除匹配PATTERN的文件
我肯定我遗漏了一些东西,但我就是找不到!提前谢谢各位朋友我不知道为什么--exclude在这里不起作用..但是我修改了find命令,并成功地让它起作用
FIND="`find $TOSAVE -mindepth 1 -type d \( -path $TOSAVE/backup \) -prune -o -mtime -1 -print`"
我不知道为什么--exclude在这里不起作用..但是我修改了find命令,并设法让它起作用
FIND="`find $TOSAVE -mindepth 1 -type d \( -path $TOSAVE/backup \) -prune -o -mtime -1 -print`"
:
无论本地文件说明符是*
(如上所述),/*
还是/tmp/tmp.MGUbytm0h0/*
,无论$PWD
是/tmp/tmp.MGUbytm0h0
还是其他什么,这都有效。:
无论本地文件说明符是否为*
(如上所述),此选项都有效,/*
或/tmp/tmp.MGUbytm0h0/*
,以及$PWD
是否为/tmp/tmp.MGUbytm0h0
或其他内容。您应该能够解决--排除问题,方法是不在选项周围加引号,或者不使用=
而使用空格;rsync
非常注重如何编写选项:
--exclude=backup
备选方案:
其他建议:
#!/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 {} \;
删除变量的尾部斜杠(rsync对/
非常具体)
对于命令替代,请使用$(…)
而不是反勾号(如果可用/可能)
消除冗余代码(例如,您定义了$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
来进一步完善您的脚本,但我将把这一点留给您。您应该能够解决--exclude
问题,方法是不在选项周围加引号,或者通过包含空格而不是使用=
;rsync
对h非常特别以下选项被写入:
--exclude=backup
备选方案:
其他建议:
#!/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 {} \;
删除变量的尾部斜杠(rsync对/
非常具体)
对于命令替代,请使用$(…)
而不是反勾号(如果可用/可能)
消除冗余代码(例如,您定义了$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
来进一步完善脚本,但我将把这一点留给您。不,它没有改变:/为什么不将--backup dir=
选项与rsync一起使用…它是用于增量备份的。类似于:-OPTS=“-aq--exclude'/backup'--backup dir=$BACKUPDIR“rsync$OPTS$FIND很好,脚本按原样工作,但它也复制了此备份文件夹,而此备份文件夹不应。。改变这一点不是问题,但我更愿意解决排除问题。顺便说一句,这不是增量备份。/thingstobackup/中的所有文件都是每天生成的新文件。这就是为什么必须在每日文件夹中复制。它们不是同一个问题是每次脚本运行时都要创建备份目录,并将其放在$today目录之前。这就是为什么最终可能会出现无止境的嵌套目录。通常情况下,您首先需要有日期的目录,然后是其中的备份内容(例如,。/$TODAY/$BDIR
)[-d$TOSAVE/$BDIR/$TODAY]| | mkdir-p$TOSAVE/$BDIR/$TODAY第一次运行时创建备份文件夹(感谢mkdir-p),第二次运行时将在备份中创建新的day文件夹,该文件夹已经创建好了。也许你是对的,但我觉得这不是问题所在,是吗?你能告诉我为什么吗?该条件应该运行平稳:/n没有变化:/n为什么不将--backup dir=
选项与rsync一起使用。。。它用于增量备份。类似于???:OPTS=“-aq--exclude'/backup'--backup dir=$BACKUPDIR”rsync$OPTS$FIND好吧,脚本按原样工作,但它也复制了这个备份文件夹,而这个文件夹不应该。。改变这一点不是问题,但我更愿意解决排除问题。顺便说一句,这不是增量备份。/thingstobackup/中的所有文件都是每天生成的新文件。这就是为什么必须在每日文件夹中复制。它们不是同一个问题是你正在创建b