Я сделал сценарий, чтобы каждые 6 часов копировать папку в резервную папку, а затем помещать их в /var/www/html/backup/
.
Моя команда скопировать файлы была cp -vR ~/world ~/backups/Backup\ on\ $date/world
Я желал, чтобы каждая резервная копия стала папкой, а внутри нее находилась одна папка, называемая world
, который скопирован из моей домашней папки.
Вместо этого моя команда сохранила полный путь к папке. Это означало, что структура папок резервной копии оказалась такой:
Backup on 5-3-2019
↳ home
↳ elijahmc
↳ backups
↳ Backup on 5-3-2019
↳ world
Чтобы попытаться исправить это, я изменил аргументы с cp -vR
к cp -vr
, и это исправлено папка под /backups
, но не когда я перемещаю его в ZIP-архив.
Напомним, я изменил cp -vR
к cp -vr
и теперь у вас есть такая структура каталогов:
Backup on 5-3-2019
↳ world
Теперь я превращаю его в zip вот так:
rm -f ~/backup.zip
(удалить исходный zip)
zip -r ~/backup.zip ~/backups/Backup\ on\ $date
(превратить новую резервную копию в backup.zip
в корневом каталоге
mv -f ~/backup.zip /var/www/html/backup/
(шаг backup.zip
на веб-сервер)
Скачивание backup.zip
с сервера Apache файловая структура имеет ту же проблему, что и исходная команда:
Backup on 5-3-2019
↳ home
↳ elijahmc
↳ backups
↳ Backup on 5-3-2019
↳ world
Кто-нибудь знает, как это исправить?
Чтобы скопировать папку world
к ~/backups/backup_2019-05-04
:
backupdir=~/backups/backup_$(date +%F)
mkdir -p "$backupdir"
cp -av ~/world "$backupdir"
Я использовал флаг -a
для режима архива, который включает -R
. Вам не нужно указывать world
в целевом аргументе.
Чтобы включить только world
папка в zip файле ~/backup_2019-05-04.zip
:
cd "$backupdir"
zip -r ~/backup_$(date +%F).zip *
Вы допустили ошибку, используя полный путь к целевому каталогу, когда вы «заархивировали» каталог.
Да, я бы сказал, вам стоит пройти курс по Bacula, так как со временем это будет проще ... но вам лучше сначала изучить bash.
~
расширяется до значения $HOME
, cp
команда принимает аргумент источника (от) и назначения (к); cp
ты используешь -R
копировать рекурсивно. $(date <args>)
так что вы можете получить правильный формат, например mm-dd-yyyy
будет больше информации об этом в man date
или date --help