将mysqldump文件从一个目录复制到备份目录

将mysqldump文件从一个目录复制到备份目录,mysql,linux,shell,crontab,Mysql,Linux,Shell,Crontab,我正在构建一个shell脚本,该脚本将在crontab的帮助下每晚运行,我的脚本不断爆炸,并给出错误“Syntax error:wordunexpected(预期为“do”) 脚本本身正在为它在目录中找到的每个MySQL文件创建一个新目录,然后将这些文件从相应的mysqldump目录复制到一个已创建的目录。请让我知道我的代码是否正确,以及是什么原因导致了我的文件结束错误。我不熟悉shell脚本,并且会接受任何建议如果有更好的方法来编写我的代码,那么也可以在这方面提供帮助 CDPATH="/bac

我正在构建一个shell脚本,该脚本将在crontab的帮助下每晚运行,我的脚本不断爆炸,并给出错误“Syntax error:wordunexpected(预期为“do”)

脚本本身正在为它在目录中找到的每个MySQL文件创建一个新目录,然后将这些文件从相应的mysqldump目录复制到一个已创建的目录。请让我知道我的代码是否正确,以及是什么原因导致了我的文件结束错误。我不熟悉shell脚本,并且会接受任何建议如果有更好的方法来编写我的代码,那么也可以在这方面提供帮助

CDPATH="/backups/mysql"
#
now=$(date +"%Y_%m_%d")
#
# Find Directory Name
#
for file in */; do
    dir=${file%/}
    if [[ -e "$dir"]]
    then
        echo "Directory Exists!"
    else
        echo "Directory doesn't exist."
    fi
done
#
# Copy MySQL Databases
#
while [ -d $dir ]; do                                      # Check existing Dirs
    cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now    # If Dir exists, create copy
    if [ ! -d $dir ]; then                                 # If Dir nonexistant create
        mkdir -p $dir
        cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now
    else                                                   # If all else fails just create a copy in /mysql
        cp -upf /dbase/files/*.sql /backups/mysql/$dir/$now
    fi
done
提前感谢您的帮助!

1.不要在“else”之后使用“then”
2.第二行可能不是您想要的,它只是将变量dir设置为字符串“dir(/backups/mysql/*)”
…因为问题已经改变,所以过时了

我假设,以下格式的文件…
/dbase/files/db1.sql
/dbase/files/db2.sql

…应备份到以下目标:

/backups/mysql/db1/2014_11_18/db1.sql

#!/bin/bash
BACKUP_DIR="/backups/mysql/"
FILE_DIR=/dbase/files/
now=$(date +"%Y_%m_%d")

# setting the input field seperator to newline
IFS=$'\n'

# find db backups and loop over
for file in $(find ${FILE_DIR} -maxdepth 1 -name "*.sql" -type f -exec basename {} \;); do
    # create backup directory:
    mkdir -p "${BACKUP_DIR}${file%.sql}/${now}"

    # copy file over        
    cp "${FILE_DIR}${file}" "${BACKUP_DIR}${file%.sql}/${now}/"
done
将脚本转换为unix编码:

dos2unix script.sh

我仍然收到“语法错误:意外的文件结尾”。保存文件后,“fi”下会自动添加一条黑线。这可能是问题的一部分吗?我尝试过使用“#“删除该行,但始终会在该行下添加新行。如果您有多个db,则必须循环这些db。您建议使用什么来查找是否存在特定目录?您建议如何在数据库中循环?我不熟悉shell脚本,可以利用我能得到的所有帮助。你的假设是正确的。不幸的是,我看不到是否有任何工作,因为我继续得到单词unexpected(expected do)error。我尝试了十六进制转储和重新启动脚本,但我得到了同样的问题。知道是什么引起的吗?是的我知道。我从#变成了#/垃圾桶/扑向#/垃圾桶/垃圾桶,这似乎没有帮助。