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