Именование файла tar с датой

Я хочу назвать файл tar с датой, но то, что я пытаюсь сделать, не работает, см. Код ниже для лучшего объяснения и что нужно делать?

date=$( date +%Y-%m-%d_%H:%M:%S )
tar -czf ${imageName-$date}.tar.gz ${imageBasename} 2>>$ERRORLOG

Имя изображения - это переменная, которая хранит имя изображения, например: win-ser-rdp

Я тоже пробовал:

tar -czf ${imageName}:${date}.tar.gz ${imageBasename} 2>>$ERRORLOG

Не получилось тоже :(

Благодаря всей помощи: D

3 ответа

Неверные имена файлов и переменные:

${imageName-$date}

Должно быть

${imageName}${date}

а также

${imageName}:${date}.tar.gz

будет интерпретироваться как местоположение NFS из-за : в имени, например server:filename. Замените : - или другим неспециальным символом.


Проблема заключается в следующем : в имени файла, который обрабатывается специально GNU tar.

В моей собственной системе, где у меня есть каталог с именем foo, я получаю следующее:

$ tar zcf foo:42.tar.gz foo
tar (child): Cannot connect to foo: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now
$

Кажется, нет никакого способа избежать символа : но вы можете запретить специальную интерпретацию с помощью опции -force --force-local (спасибо Daniel Serodio за указание на это).

Символы Colon в именах файлов, хотя они и являются законными, обычно являются плохими идеями. Например, вы, вероятно, не сможете получить доступ к файлу с помощью scp.

Здесь соответствующий раздел из руководства GNU tar (info tar и перейдите к разделу 6.1):

Чтобы указать файл архива на устройстве, подключенном к удаленному компьютеру, используйте следующее:

<code>--file=hostname: /dev/file-name</code>

tar, если возможно, настроит удаленное соединение и предложит ввести имя пользователя и пароль. Если вы используете <code>--file=@hostname: /dev/file-name</code>, tar попытается настроить удаленное соединение, используя ваше имя пользователя в качестве имени пользователя на удаленном компьютере.

Когда я делаю имена файлов, которые содержат метку времени, я обычно использую YYYY-MM-DD-HHMMSS

$(date +%F-%H%M%S)

или вы можете использовать YYYY-MM-DD_HH_MM_SS если хотите

$(date +%F-%H_%M_%S)


попробуйте избежать всех двоеточий в tarfilename, так как это заставит tar попытаться вывести в удаленный файл:

date=$( date +%Y%m%d_%H%M%S ) tar -czf ${imageName}-${date}.tar.gz ${imageBasename} 2>>${ERRORLOG}

licensed under cc by-sa 3.0 with attribution.