首先,我承认我对基于 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"
}