Краткий tar-скрипт: «команда не найдена» при попытке добавить сегодняшнюю дату к сжатому имени файла - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь создать скрипт, который будет выполнять следующие действия:

  1. создать / home / testuser / backup в качестве каталога, если он не существует (и не будет отображать ошибкусообщение, если оно существует)
  2. получить текущую дату и сохранить ее как переменную
  3. Используя Tar:
    • сделать резервную копию всего каталога файлов проекта
    • резервная копиясжатый, в формате gzip, в архивном формате
    • использует хранимую переменную для включения даты в имя файла tar
    • резервная копия отправляется в каталог / home / testuser / backup
    • создать файл журнала с именем testuser.log со всеми сообщениями, сгенерированными командой tar (используя подробный режим)
    • сохранить файл журнала в /home/testuser/backup/testuser.log

У меня проблемы с синтаксисом команды, и я не совсем понимаю, что я делаю неправильно.

cd /home/testuser

mkdir -p /home/testuser/backup

today=$(date'+%d-%m-%y')

tar -zcvf testuserbackup-$today.tar.gz projectfiles && 
testuserbackup-$today.tar.gz /home/testuser/backup

testuserbackup-$today.tar.gz >> testuser.log 2>/dev/null

mv testuser.log /home/testuser/backup

Когда я пытаюсь запустить скрипт, я получаюследующий вывод терминала:

./script2.sh: line 6: date+%d-%m-%y: command not found
projectfiles/
projectfiles/budget/
projectfiles/budget/testuserbudget1.txt
projectfiles/budget/testuserbudget2.txt
projectfiles/old/
projectfiles/old/testuserold2.txt
projectfiles/old/testuserold1.txt
projectfiles/documents/
projectfiles/documents/testuserdoc2.txt
projectfiles/documents/testuserdoc1.txt
./script2.sh: line 7: testuserbackup-.tar.gz: command not found

Я открыт для любых предложений.Это задание из старого задания прошлого семестра, к которому я возвращаюсь для забавы ... Согласно моим старым заметкам о назначении, это задание должно выполняться не более чем в 4 строках кода.

** РЕДАКТИРОВАТЬ: ** Готовый сценарий (с помощью Джона)

#!/bin/bash
mkdir -p /home/testuser/backup
today=$(date '+%d-%m-%y')
tar -zcvf backup/testuserbackup-"$today".tar.gz projectfiles > 
backup/testuser.log 2>&1

1 Ответ

0 голосов
/ 29 декабря 2018

Вам не хватает пробела:

today=$(date '+%d-%m-%y')
#           ^

Кроме того, все эти строки должны быть объединены:

tar -zcvf testuserbackup-$today.tar.gz projectfiles && 
testuserbackup-$today.tar.gz /home/testuser/backup

testuserbackup-$today.tar.gz >> testuser.log 2>/dev/null

mv testuser.log /home/testuser/backup

Файл журнала необходимо создать в той же строке, что иtar, и заставить tarball и файл журнала отображаться в нужном месте, можно сделать, записав их полные пути.Это избавляет от необходимости перемещать их позже.

tar -zcvf backup/testuserbackup-"$today".tar.gz projectfiles > backup/testuser.log 2>&1

Это хорошая идея для захвата как stderr, так и stdout, поэтому я изменил 2>/dev/null на 2>&1.

...