首先,我承认我是基于 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)
路径分隔符在文件名中/
是严格禁止的(想象一下,如果不是这样的话,那将是地狱!)
否则......命令替换的反引号有点过时,所以我改变了它......并稍微调整了你的引用
如果您真的希望脚本将自身复制到目标...
#!/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)