如何获得SVN备份cron的工作?

我试图让我的Ubuntu服务器上的脚本在这里工作,通过cron备份SVN仓库。

#!/bin/bash BACKUP_DIR="/backup/repository" REPOSITORY_DIR="/home/svn/repository" #search in repository folder to find all the repository names ls -Al --time-style=long-iso /home/svn/repository/ | grep '^d' | awk '{print $8}' | while read line do if [ ! -d $BACKUP_DIR"/"$line ]; then mkdir $BACKUP_DIR"/"$line fi #Getting revision number REVISION=`cat $REPOSITORY_DIR"/"$line"/db/current" | awk '{print $1}'` #Archive last backup tar -czf $BACKUP_DIR"/"$line"-last.tar.gz" $BACKUP_DIR"/"$line"/" #Dangerous :) if [ -n "$BACKUP_DIR" ]; then rm -rf $BACKUP_DIR"/"$line"/*" fi #Check to see if exists a hot backup if [ -d $BACKUP_DIR"/"$line"/"$line"-"$REVISION ]; then echo "Skipping Backup ! Backup Already Exists" else echo "Doing backup for "$line /usr/bin/svn-hot-backup $REPOSITORY_DIR"/"$line $BACKUP_DIR"/"$line fi done 

我已经将path更改为正确的,并且安装了subversion-tools,但是如果我尝试运行sudo bash svnbackup.sh,则会出现以下错误:

 : command not foundline 2: svnfullbackup.sh: line31: syntax error near unexpected token 'done' svnfullbackup.sh: line31: 'done' 

我认为这些错误是为什么cron没有在指定的时间工作。 我怎样才能解决他们?

“命令未find”的错误看起来像被覆盖,这是一个错误的行结束types的指示。 在脚本文件上运行dos2unix来解决这个问题。 这可能是一些其他的stream浪人物。 显示您的脚本使用hexdumpcat -v来显示。 在Unix文件上使用Windows编辑器时,经常会发生此问题。

而不是这一行:

 ls -Al --time-style=long-iso /home/svn/repository/ | grep '^d' | awk '{print $8}' | while read line 

用这个:

 find "$REPOSITORY_DIR" -maxdepth 1 -type d | while read -r line 

这不依赖于ls而不是用于脚本/pipe道。 这样做也更有可能在文件名包含空格的情况下工作。

你可以按照你的方式进行引用,但是这个例子可能会更好,因为如果文件名中有空格,它可以工作:

 if [ ! -d "$BACKUP_DIR/$line" ]; then mkdir "$BACKUP_DIR/$line" 

最好使用$()而不是反引号,而cat是不必要的(也简化了引用):

 REVISION=$(awk '{print $1}' "$REPOSITORY_DIR/$line/db/current" ) 

还有更多的地方可以简化报价。

我似乎没有发现任何错误的脚本,除了它不会工作,当你有仓库名称包含空格….是这样的情况?