【发布时间】:2014-12-04 14:27:58
【问题描述】:
我有一个 shell 脚本,我尝试每隔几天运行一次,它会复制 .sql 数据库文件并将它们移动到附加了 /$now/ 的指定文件夹中。该脚本执行完美,但我得到一个 cp: cannot create regular file '/path/to/dir/$now/': No such file or directory。
我知道这些文件夹存在,因为当我“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
已经创建的所有 9 个目录都会发生这种情况
【问题讨论】:
-
那行代码的 sn-p 是什么? (包括任何相关变量的赋值行。)
-
我已将代码添加到原始问题中。
-
如果您将
-v添加到该mkdir行,您是否看到它输出它正在创建目录?将set -x添加到脚本的顶部,看看当它失败时你正在运行什么。 -
好的,所以当我添加 -v 时它告诉我它无法访问 *.sql:没有这样的文件或目录。我把 .sql 从通配符中去掉,现在它只是从每个 .txt 或 .isi 中创建一个文件,并在其中放置一个带有日期的子目录。没有文件被复制到 $now 目录中。
-
我现在已经创建了目录,但是仍然没有 .sql 文件被复制到 $now 目录中。没有这样的文件或目录;即使它列出了它创建的目录。