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

Jam*_*r91 4 bash cp

首先,我承认我是基于 UNIX 的系统的新手,我目前正在大学学习。

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

cp: cannot create regular file '../Logs/bashmenu.22:52:28-06/12/2016.sh': No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

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

/Home/Scripts/bashmenu.sh
Run Code Online (Sandbox Code Playgroud)

我要备份到的位置的目录路径是:

/Home/Logs/TARGET
Run Code Online (Sandbox Code Playgroud)

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

这是我的脚本的一部分,我认为有影响的部分:

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

Zan*_*nna 6

路径分隔符在文件名中/严格禁止的(想象一下,如果不是这样的话,那将是地狱!)

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

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

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

所以这个函数可能是这样的

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