以下是我尝试让它工作的脚本:
#!/bin/bash
filePath="$1"
fileName="$( basename "$filePath" )"
backupDir="/my/backup/dir/${fileName}-backups/"
dateTime=$( date "+%d.%m.%Y_%H:%M:%S" )
# Check if backup folder exists if not create them
if [ ! -d "$backupDir" ]; then
mkdir "$backupDir"
fi
# Create the Backup in a zip-file
zip -r "${backupDir}${fileName}-${dateTime}.zip" "$filePath"
出现此错误:
zip I/O error: Protocol error
zip error: Could not create output file (/my/backup/dir/filename-backups/filename-06.04.2014_18:54:58.zip)
问题似乎出在“dateTime”变量上。如果没有这个变量,脚本就可以正常运行。
编辑:好的,问题是日期字符串中的双点:
dateTime=$( date "+%d.%m.%Y_%H:%M:%S" )
如果我将其改为
dateTime=$( date "+%d.%m.%Y_%H-%M-%S" )
对我来说很管用。不是很好,但如果没有其他可能的话……
答案1
可能是因为 ZIP 是以 dos/windows 为中心的。在 Windows 中,:
不允许在文件名中使用 ,因为它用作驱动器号和路径之间的分隔符 ( C:\
)。
除非您确实需要 zip,否则我建议使用带有 gzip 或 xz 压缩的 tar。