Ошибка ввода-вывода: ошибка протокола в 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
задан 7 April 2014 в 00:47

1 ответ

Это, вероятно, потому что ZIP является dos/windows-centric. В Windows, : запрещен в именах файлов, так как он используется в качестве разделителя между буквой диска и путем (C:\).

, Если Вы действительно не должны архивировать, я рекомендую использовать tar с gzip или xz сжатием вместо этого.

0
ответ дан 7 April 2014 в 00:47

Другие вопросы по тегам:

Похожие вопросы: