Назад | Перейти на главную страницу

При копировании файлов в Linux сохраняется полный путь

Я сделал сценарий, чтобы каждые 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

Кто-нибудь знает, как это исправить?

  1. Чтобы скопировать папку world к ~/backups/backup_2019-05-04:

    backupdir=~/backups/backup_$(date +%F)
    mkdir -p "$backupdir"
    cp -av ~/world "$backupdir"
    

    Я использовал флаг -a для режима архива, который включает -R. Вам не нужно указывать world в целевом аргументе.

  2. Чтобы включить только world папка в zip файле ~/backup_2019-05-04.zip:

    cd "$backupdir"
    zip -r ~/backup_$(date +%F).zip *
    

    Вы допустили ошибку, используя полный путь к целевому каталогу, когда вы «заархивировали» каталог.

Да, я бы сказал, вам стоит пройти курс по Bacula, так как со временем это будет проще ... но вам лучше сначала изучить bash.

  • ~ расширяется до значения $HOME,
  • В cp команда принимает аргумент источника (от) и назначения (к);
    • Если вы хотите скопировать каталог, убедитесь, что сразу после cp ты используешь -R копировать рекурсивно.
  • Поместите эту "$ date" в подоболочку, т.е. $(date <args>) так что вы можете получить правильный формат, например mm-dd-yyyy будет больше информации об этом в man date или date --help