2014-12-04 208 views
0

我有一个shell脚本,我试图每隔几天运行一次复制.sql数据库文件并将它们移动到/ $ now /所附的指定文件夹中。脚本执行完美,但我得到一个cp:无法创建常规文件'/ path/to/dir/$ now /':没有这样的文件或目录。

我知道这些文件夹存在,因为它出现在我'ls -ltr'目录中。

我的所有权限都是可执行的和可写的。这让我困惑了大约一个星期,而我只是不能把它放在手指上。

这里是我的代码:

#!/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}" "${BACUP_DIR}${file%.sql}/${now}/" 
done 

提前感谢!

更新:

错误我得到:

+ mkdir -pv /backups/mysql/health/2014_12_04 
+ cp /dbase/files/health.sql health/2014_12_04/ 
cp: cannot create regular file 'health/2014_12_04/': No such file or directory 

这是发生对已创建

+0

围绕该行的代码段是什么? (包括任何相关变量的赋值行。) – 2014-12-04 14:29:18

+0

我已将代码添加到原始问题中。 – Mark 2014-12-04 14:35:44

+0

如果你添加了'-v'到那个'mkdir'行,你会看到它输出它正在创建目录吗?将'set -x'添加到脚本的顶部,看看当它失败时显示您正在运行的是什么。 – 2014-12-04 14:41:13

回答

0

存在错误的所有9个目录是一个错字。我错过了cp行上的$ BACKUP_DIR中的'K'。以下是正确的代码:

#!/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 
+0

是的,这是正确的。 – Mark 2014-12-05 15:16:08