zip I/O 错误:bash 脚本中的协议错误

zip I/O 错误:bash 脚本中的协议错误

以下是我尝试让它工作的脚本:

#!/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。

相关内容