BASH 复制到另一个目录不起作用

BASH 复制到另一个目录不起作用

首先,我承认我对基于 UNIX 的系统还很陌生,我目前正在大学学习。

我正在尝试创建一个自动将现有文件备份到现有目录的功能。但是,CLI 返回了一条消息,其中引用了以下内容:

cp: cannot create regular file '../Logs/bashmenu.22:52:28-06/12/2016.sh': No such file or directory

我做了大量的自我研究,但仍找不到解决我的问题的方法。

我想要备份的包含该函数的文件的目录路径是:

/Home/Scripts/bashmenu.sh

我希望备份的位置的目录路径是:

/Home/Logs/TARGET

备份文件时,我希望它带有日期戳。因此,我使用了几个变量来获取备份时文件的命名约定。我相信这就是问题的原因。我不知道这是否会导致问题,但是文件和目录都在 USB 上,我只是为它创建了一个类似的目录路径。

以下是我的脚本的一部分,我认为这些部分有所不同:

#### #!/bin/bash
fullname=`basename "$0"`
now=`date +"%H:%M:%S-%d/%m/%Y"`;
backupname="${fullname%.*}"".""$now.sh"
cp -v $fullname ../Logs/$backupname

答案1

路径分隔符/严禁在文件名中(想象一下如果不是这样的话会发生什么地狱!)

否则...命令替换的反引号有点不推荐使用,所以我改变了它...并稍微调整了你的引用

如果您确实希望脚本将自身复制到目标...

#!/bin/bash
fullname=$(basename "$0")
now=$(date +"%H:%M:%S-%d.%m.%Y")
backupname="${fullname%.*}"."$now.sh"
cp -v "$fullname" ../Logs/"$backupname"

因此函数可能类似于

backup() {
fullname=$(basename "$1")
now=$(date +"%H:%M:%S-%d.%m.%Y")
backupname="${fullname%.*}"."$now.sh"
cp -v "$fullname" /path/to/wherever/"$backupname"
}

相关内容