Восстановить инкрементальный бекап

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Восстановить инкрементальный бекап

Сообщение nerve »

есть директория с каталогом Фулл и очень много каталогов с инкрементальными копиями.
насколько я понимаю надо по порядку создания инкрементальных директорий переместить их содежимое в каталог Фулл

Код: Выделить всё

[/share/Public/bth] # ls -1
Documents 2013-04-16 09;57;11 (Full)/
Documents 2013-04-16 12;00;03 (Incremental)/
Documents 2013-04-17 12;00;03 (Incremental)/
Documents 2013-04-18 12;00;03 (Incremental)/
Documents 2013-04-22 12;00;04 (Incremental)/
Documents 2013-04-23 12;00;03 (Incremental)/
Documents 2013-04-24 12;00;03 (Incremental)/
Documents 2013-04-25 12;00;03 (Incremental)/
..

#!/bin/sh
cd /share/Public/bth && mv -r ./Documents 2013-04-16 09;57;11 (Full) ../
for f in `ls -1`
do
mv -f $f/* ../Documents 2013-04-16 09;57;11 (Full)/
rm -f $f
done
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Восстановить инкрементальный бекап

Сообщение nerve »

проверил - не правильно обрабатываются каталоги с пробелами.
mv получает в цикле сначала Documents потом дату, потом время и соответственно не находит таких каталогов
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Восстановить инкрементальный бекап

Сообщение SLEDopit »

Потому что за вот такой код

Код: Выделить всё

for f in `ls -1`

нужно бить по рукам. Вот так правильно:

Код: Выделить всё

for f in *


И у mv нет опции -r. Ваша команда mv -r свалится с ошибкой и ничего не переместит.

Ну и все имена с символами вроде пробелов нужно брать в кавычки.

Код: Выделить всё

mv -f "$f"/* "../Documents 2013-04-16 09;57;11 (Full)/"

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Восстановить инкрементальный бекап

Сообщение nerve »

я уже это понял, сделал так:

Код: Выделить всё

#!/bin/bash
cd ./bth
for f in ./*
do
cp -r "${f}"/* ../Documents/
#echo $f
done
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Восстановить инкрементальный бекап

Сообщение drBatty »

SLEDopit писал(а):
31.10.2013 14:51
И у mv нет опции -r.

она смысла не имеет.
nerve писал(а):
31.10.2013 15:36
я уже это понял, сделал так:

неправильно. Намного более логичнее сделать так

Код: Выделить всё

find . -type f -exec cp -a --parents -T TARGET_DIR/ {} +

тут переносятся только файлы. Каталоги создаются по необходимости. Имена файлов -- любые.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Восстановить инкрементальный бекап

Сообщение SLEDopit »

drBatty писал(а):
31.10.2013 15:49
она смысла не имеет.
Тем не менее, mv упадёт с ошибкой и ничего не переместит.

Код: Выделить всё

 $ mv -r test /dev/null
mv: invalid option -- 'r'
Try 'mv --help' for more information.

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Восстановить инкрементальный бекап

Сообщение nerve »

а где о mv -r вообще шла речь?

drBatty писал(а):
31.10.2013 15:49

Код: Выделить всё

find . -type f -exec cp -a --parents -T TARGET_DIR/ {} +

тут переносятся только файлы. Каталоги создаются по необходимости. Имена файлов -- любые.

в данном случае в каком порядке найденные файлы будут поступать к cp ? чтоб не получилось что более новый файл из бекапа затрется более старым. с циклом более менее понятно, там директории по очереди обрабатываются. в случае с find - он так же по очереди обходит директории?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Восстановить инкрементальный бекап

Сообщение SLEDopit »

nerve писал(а):
31.10.2013 16:51
а где о mv -r вообще шла речь?
nerve писал(а):
31.10.2013 13:12
cd /share/Public/bth && mv -r ./Documents 2013-04-16 09;57;11 (Full) ../
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Восстановить инкрементальный бекап

Сообщение drBatty »

SLEDopit писал(а):
31.10.2013 16:15
Тем не менее, mv упадёт с ошибкой и ничего не переместит.

ессно. Как и

$

$ (( 1/0 )) bash: ((: 1/0 : деление на 0 (error token is "0 ")



а как иначе-то?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Восстановить инкрементальный бекап

Сообщение drBatty »

nerve писал(а):
31.10.2013 16:51
в данном случае в каком порядке найденные файлы будут поступать к cp ?

не определено.

nerve писал(а):
31.10.2013 16:51
в данном случае в каком порядке найденные файлы будут поступать к cp ? чтоб не получилось что более новый файл из бекапа затрется более старым.

а вы используйте вот эту опцию cp
--update
copy only when the SOURCE file is newer than the destination file or when the desti-
nation file is missing

тогда она будет затирать только самые старые файлы. А ваш вариант сортирует файлы по имени каталога, что вообще говоря к времени отношения НЕ имеет.
nerve писал(а):
31.10.2013 16:51
в случае с find - он так же по очереди обходит директории?

нет конечно. Но вообще можно и по очереди, Это вот так:

Код: Выделить всё

find * ...

тут звёздочка расползётся в список отсортированный по алфавиту, который и получит find.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Восстановить инкрементальный бекап

Сообщение nerve »

drBatty писал(а):
31.10.2013 19:54
тогда она будет затирать только самые старые файлы. А ваш вариант сортирует файлы по имени каталога, что вообще говоря к времени отношения НЕ имеет.

каталоги сортируются как раз подряд из-за времени и имени своего создания. я исходил из того, что надо пройтись по всем по очереди, и если в каждом есть новые/обовленные файлы/каталоги, то они добавятся/заменят таковые в первоначальном. сотрудник неправильно себе бекап настроил, поставил галку создавать инкрементальную копию отдельно. да, появились версии документов, но вряд ли он этого пытался добится)

а вообще по варианту drBatty, более эффективно может получиться. если есть более 2 обновленных файлов в инкрементальном бекапе, то есть шанс, что будет сразу скопирован более новый файл и остальные уже не пройдут.
Батти, а что это у лошадки за лавровый листок на теле?)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Восстановить инкрементальный бекап

Сообщение drBatty »

nerve писал(а):
01.11.2013 00:15
я исходил из того, что надо пройтись по всем по очереди, и если в каждом есть новые/обовленные файлы/каталоги, то они добавятся/заменят таковые в первоначальном.

нет, вы всё правильно сделали, но это ненадёжно. Надёжнее будет посмотреть дату файла и дату другого, и копировать тогда, и только тогда, когда дата другого больше даты этого. А ещё это намного быстрее. Но самое главное -- команда cp так умеет без всяких костылей.

nerve писал(а):
01.11.2013 00:15
а вообще по варианту drBatty, более эффективно может получиться. если есть более 2 обновленных файлов в инкрементальном бекапе, то есть шанс, что будет сразу скопирован более новый файл и остальные уже не пройдут.

о том и речь.

offtop
Spoiler
nerve писал(а):
01.11.2013 00:15
а что это у лошадки за лавровый листок на теле?)

http://lurkmore.to/My_Little_Pony#Crossfic...6_custom_ponies
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: