Итак, вот сценарий, который я пытаюсь заставить его работать:
#!/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" )
, то работает для меня. Не очень хорошо, но если нет другой возможности ...
Это, вероятно, потому что ZIP является dos/windows-centric. В Windows, :
запрещен в именах файлов, так как он используется в качестве разделителя между буквой диска и путем (C:\
).
, Если Вы действительно не должны архивировать, я рекомендую использовать tar с gzip или xz сжатием вместо этого.