Author Topic: Backup новых файлов, кроме больших  (Read 6597 times)

0 Members and 1 Guest are viewing this topic.

Offline Vladn

  • Newbie
  • *
  • Posts: 40
  • Karma: +0/-0
Backup новых файлов, кроме больших
« on: January 23, 2007, 11:13:56 »
Есть задача: сделать backup только новых файлов (например, которые изменились с начала месяца), и размер которых не превышает определенной величины (например, чтобы не архивировать фильмы или дистрибутивы).
С первой задачей справляюсь так: tar --newer-mtime DATE /home/
А как решить вторую задачу?

Offline never hood

  • Hero Member
  • *****
  • Posts: 845
  • Karma: +16/-10
  • www.4job.co
    • Работа, которую ты искал
Backup новых файлов, кроме больших
« Reply #1 on: January 23, 2007, 11:58:04 »
Quote from: Vladn
Есть задача: сделать backup только новых файлов (например, которые изменились с начала месяца), и размер которых не превышает определенной величины (например, чтобы не архивировать фильмы или дистрибутивы).
С первой задачей справляюсь так: tar --newer-mtime DATE /home/
А как решить вторую задачу?
наверно, проще tar скомпоновать с find'ом... у последнего масса опций, включая нужные тебе

Offline Vladn

  • Newbie
  • *
  • Posts: 40
  • Karma: +0/-0
Backup новых файлов, кроме больших
« Reply #2 on: January 23, 2007, 13:03:58 »
Спасибо. Так, наверное, и сделаю.
А готовых решений нет?

Offline never hood

  • Hero Member
  • *****
  • Posts: 845
  • Karma: +16/-10
  • www.4job.co
    • Работа, которую ты искал
Backup новых файлов, кроме больших
« Reply #3 on: January 23, 2007, 13:56:25 »
Quote from: Vladn
Спасибо. Так, наверное, и сделаю.
А готовых решений нет?
Amanda идет с федорой и, возможно, RedHat'ом...
Думаю, стоит там порыть...

Можно поискать на freshmeat.net там есть раздел Backup (через Browse... точно не помню)

Offline Vladn

  • Newbie
  • *
  • Posts: 40
  • Karma: +0/-0
Backup новых файлов, кроме больших
« Reply #4 on: January 23, 2007, 16:17:53 »
Quote from: never hood
наверно, проще tar скомпоновать с find'ом... у последнего масса опций, включая нужные тебе
Я нашёл, что с помощью find можно сформировать список файлов определенного размера, но как сформировать список файлов, размер которых больше/меньше заданного, для меня осталось загадкой.
Буду писать perl-скрипт.

Offline never hood

  • Hero Member
  • *****
  • Posts: 845
  • Karma: +16/-10
  • www.4job.co
    • Работа, которую ты искал
Backup новых файлов, кроме больших
« Reply #5 on: January 23, 2007, 16:41:30 »
Quote from: Vladn
Я нашёл, что с помощью find можно сформировать список файлов определенного размера, но как сформировать список файлов, размер которых больше/меньше заданного, для меня осталось загадкой.
Внимательнее читаем man!
Примеры, которые работают, ниже.
Файлы больше 10 килобайт:
>find ./ -size +10k -ls
Файлы меньше 10 килобайт:
>find ./ -size -10k -ls

Offline never hood

  • Hero Member
  • *****
  • Posts: 845
  • Karma: +16/-10
  • www.4job.co
    • Работа, которую ты искал
Backup новых файлов, кроме больших
« Reply #6 on: January 23, 2007, 16:58:55 »
Целиком решение твоей задачи выглядит так:
> find /some_dir/ -type f -size -10k -print |xargs tar czvf /tmp/small_files.tgz

т.е. архив всех файлов ниже каталога /some_dir/, размер которых менее 10 килобайт.

Offline Vladn

  • Newbie
  • *
  • Posts: 40
  • Karma: +0/-0
Backup новых файлов, кроме больших
« Reply #7 on: January 23, 2007, 17:50:27 »
Спасибо

Offline stranger

  • Hero Member
  • *****
  • Posts: 922
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #8 on: January 24, 2007, 01:41:40 »
Еще можно fsbackup запользовать... Там много разных фичь и настроек можно забахать...
Можно по ftp бакапы сбрасывать, можно по ssh - есть много настроек по проверки файлов и заданию ограничений по маскам и по размерам... Можно использовать различные настройки при архивировании...
Например, архивировать только определенные папки или все кроме... Можно задать размер томов...
Можно делать либо полные, либо инкрементальные архивы... Самое удобное, что в результате обычные tarы получаются...
« Last Edit: January 24, 2007, 01:42:31 by stranger »
[span style='font-family:Geneva'][span style='font-size:8pt;line-height:100%'][span style='color:gray']Единственное условие, от которого зависит успех, есть терпение.   Л.Н.Толстой
[/span][/span][/span]

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #9 on: January 24, 2007, 09:22:24 »
Quote from: stranger
Еще можно fsbackup запользовать... Там много разных фичь и настроек можно забахать...
Можно по ftp бакапы сбрасывать, можно по ssh - есть много настроек по проверки файлов и заданию ограничений по маскам и по размерам... Можно использовать различные настройки при архивировании...
Например, архивировать только определенные папки или все кроме... Можно задать размер томов...
Можно делать либо полные, либо инкрементальные архивы... Самое удобное, что в результате обычные tarы получаются...
А там внутри, часом, не приведённая выше конструкция?

PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+

Offline never hood

  • Hero Member
  • *****
  • Posts: 845
  • Karma: +16/-10
  • www.4job.co
    • Работа, которую ты искал
Backup новых файлов, кроме больших
« Reply #10 on: January 24, 2007, 10:09:47 »
Quote from: Safir
PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+
и еще на один символ
find /some_dir/ -type f -size -10k -exec tar czf /tmp/small_files.tgz {}+

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #11 on: January 24, 2007, 10:26:29 »
Quote from: never hood
и еще на один символ
find /some_dir/ -type f -size -10k -exec tar czf /tmp/small_files.tgz {}+
Кстати да, быстрее работать будет - вывод на экран всяческих отчётов жутко тормозит систему из-зи ожидания завершения вывода.

Offline Vladn

  • Newbie
  • *
  • Posts: 40
  • Karma: +0/-0
Backup новых файлов, кроме больших
« Reply #12 on: January 24, 2007, 18:57:26 »
Quote from: Safir
PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+
Это даже не только из любви к искусству - это более верный способ, т.к. при наличии в именах файлов пробелов и разных спецсимволов, использование find ... | xargs ... приводит к проблемам. Я даже пробовал find /some_dir/ -type f -print0 |xargs -0 tar czvf /tmp/small_files.tgz , но всё равно такой вариант давал сбои (если в папке some_dir очень много файлов, то архивировалась только часть).
Я пробовал на FreeBSD 6.1.  В ней обязательно оказалось перед + поставить пробел:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {} +
иначе была ошибка  find: -exec: no terminating ";" or "+"

А ещё я столкнулся со следующим ограничением:
при выполнении perl-строчки `tar cfvz $saveto_dir$date\.tgz $file_list `; когда размер переменной $file_list превышает 200-400Кб, то команда не выполняется. Наверно, буфер, в который записывается строчка параметров, ограничен этим значением. И, скорее всего, это ограничение действует при использовании find ... | xargs ...

Offline stranger

  • Hero Member
  • *****
  • Posts: 922
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #13 on: January 25, 2007, 00:08:47 »
Quote from: Safir
А там внутри, часом, не приведённая выше конструкция?
Очень даже возможно... Хотя там не все так просто... Можно новые файлы по времени доступа определять - можно по md5 и т.д.
Перед созданием всегда создается хеш и это частично ускоряет время создания инкрементальных бекапов... Плюс настройка через файл конфигурации явно удобней...
У меня, например, создано несколько различных бекапов...
Один с самыми важными файлами кидается на DVD-RAM, часть кидается по sftp на другой сервак...
Все это настраивать вручную достаточно муторно...
[span style='font-family:Geneva'][span style='font-size:8pt;line-height:100%'][span style='color:gray']Единственное условие, от которого зависит успех, есть терпение.   Л.Н.Толстой
[/span][/span][/span]

Offline nuclight

  • Full Member
  • ***
  • Posts: 207
  • Karma: +1/-2
    • http://antigreen.org
Backup новых файлов, кроме больших
« Reply #14 on: January 25, 2007, 17:54:21 »
Quote from: Vladn
Это даже не только из любви к искусству - это более верный способ, т.к. при наличии в именах файлов пробелов и разных спецсимволов, использование find ... | xargs ... приводит к проблемам. Я даже пробовал find /some_dir/ -type f -print0 |xargs -0 tar czvf /tmp/small_files.tgz , но всё равно такой вариант давал сбои (если в папке some_dir очень много файлов, то архивировалась только часть).
Я пробовал на FreeBSD 6.1.  В ней обязательно оказалось перед + поставить пробел:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {} +
иначе была ошибка  find: -exec: no terminating ";" or "+"

А ещё я столкнулся со следующим ограничением:
при выполнении perl-строчки `tar cfvz $saveto_dir$date\.tgz $file_list `; когда размер переменной $file_list превышает 200-400Кб, то команда не выполняется. Наверно, буфер, в который записывается строчка параметров, ограничен этим значением. И, скорее всего, это ограничение действует при использовании find ... | xargs ...

Надо просто понимать, как оно всё работает, и писать правильно - тогда проблем не будет.
WBR, Nuclear Lightning
[FreeBSD][Давить зелёных]

Offline stranger

  • Hero Member
  • *****
  • Posts: 922
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #15 on: January 26, 2007, 04:07:13 »
Quote from: nuclight
Надо просто понимать, как оно всё работает, и писать правильно - тогда проблем не будет.
Да понимаю я как это правильно работает... Ну или достаточно ман запустить и посмотреть какие ключи юзать... Но времени это все-равно занимает много...

Хотя это не ко мне вроде относилось... Все пора спать...
« Last Edit: January 26, 2007, 04:08:36 by stranger »
[span style='font-family:Geneva'][span style='font-size:8pt;line-height:100%'][span style='color:gray']Единственное условие, от которого зависит успех, есть терпение.   Л.Н.Толстой
[/span][/span][/span]

Offline nuclight

  • Full Member
  • ***
  • Posts: 207
  • Karma: +1/-2
    • http://antigreen.org
Backup новых файлов, кроме больших
« Reply #16 on: January 26, 2007, 16:09:21 »
Quote from: stranger
Да понимаю я как это правильно работает... Ну или достаточно ман запустить и посмотреть какие ключи юзать... Но времени это все-равно занимает много...

Хотя это не ко мне вроде относилось... Все пора спать...

Да вот в том посте как-то не наблюдалось понимания того, что xargs запускает программу НЕСКОЛЬКО раз, с учетом ограничения на длину командной строки. Про непонимание работы шелла (в частности, экранирования спецсимволов) и другие мелочи я уж молчу. Мало маны читать по конкретным утилитам, надо еще пониать, как система функционирует.
« Last Edit: January 26, 2007, 16:10:58 by nuclight »
WBR, Nuclear Lightning
[FreeBSD][Давить зелёных]

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
Backup новых файлов, кроме больших
« Reply #17 on: January 26, 2007, 16:26:45 »
Quote from: nuclight
Да вот в том посте как-то не наблюдалось понимания того, что xargs запускает программу НЕСКОЛЬКО раз, с учетом ограничения на длину командной строки. Про непонимание работы шелла (в частности, экранирования спецсимволов) и другие мелочи я уж молчу. Мало маны читать по конкретным утилитам, надо еще пониать, как система функционирует.
Да, есть проблема с длинной командной строки. В это случае можно выкрутиться ешё таким образом:
list=`mktemp`;find ...>$list;tar -cT $list|bzip2 -c9>arhive.tar.bz2;rm $list
Такой финт ушами позволяет обрабатывать списки любой длинны.