Форум русскоязычного сообщества Ubuntu


Автор Тема: Как решить задачу копирования новых появившихся файлов.  (Прочитано 1428 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 900
  • Mate, и никаких Unity
    • Просмотр профиля
Помогите пожалуйста с такой задачей.
1. Имеется папка п1 в которую раза 3-5 в сутки записываются файлы размером от 50мб до 10Гб
2. Нужно копировать новый такой файл в другую папку п2.
3. Если старые файлы исчезают, меняются в п1 то это не должно сказываться на файлах в п2. Т.е. синхронизация изменений программами бэкапа не подходит.
4. Копировать можно только полностью залитый файл.

Оффлайн fluf

  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
find /p1/ -mmin +59 -mmin -1500
Создает список файлов и директорий изменённых 60-1500 минут назад

mkdir /p2/`date +%F`
Создаёт субдиректорию с сегодняшней датой

cp -- копирует одно в другое


Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Красиво можно реализовать через inotify
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 883
    • Просмотр профиля
да
inotify
iwatch, incron
и прочее

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 900
  • Mate, и никаких Unity
    • Просмотр профиля
не понятно, inotify работает по принципу триггера, сам срабатывает?
Или нужно  запускать некий скрипт с заданной периодичностью?

Погуглил, но объяснений с подходящими примерами не нашел.

Из того, что нашел получается что нужно

/media/disk1/backup1 - отслеживаемая директория.

1. этим отследить создание нового файла
/media/disk1/backup1 IN_CREATE {как-то получить имя созданного файла}

2. Отследить закрытие этого файла после записи
/media/disk1/backup1/{имя файла} IN_CLOSE_WRITE {запустить копирование этого файла в другую папку}


Оффлайн snowin

  • Активист
  • *
  • Сообщений: 883
    • Просмотр профиля
man 5 incrontab - например

1. этим отследить создание нового файла /media/disk1/backup1 IN_CREATE {как-то получить имя созданного файла}

/media/disk1/backup1 IN_CLOSE_WRITE <полный путь к скритпу, который выполнит какие-то действия> $#
здесь "$#", подставится имя файла в качестве параметра к скрипту, по которому отработано событие "закрытие файлового дескриптора после записи в файл"

/media/disk1/backup1/{имя файла} IN_CLOSE_WRITE {запустить копирование этого файла в другую папку}
не нужно записывать имя файла
ты мониторишь папку, а не файл

« Последнее редактирование: 28 Февраля 2017, 12:10:09 от snowin »

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 900
  • Mate, и никаких Unity
    • Просмотр профиля
1. Установил incron
2. Прописал пользователя в /etc/incron.allow
3. Создал в incrontab -e строку
/media/WD/test1 IN_CLOSE_WRITE,IN_MODIFY /home/user/copy_test.sh $#4. прописал в /home/user/copy_test.sh
#!/bin/sh
cp -np  $1 /media/WD/test2
5. создаю или бросаю готовый файл в /media/WD/test1
ничего не происходит.
Что-то упустил?

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 883
    • Просмотр профиля
создаю или бросаю готовый файл в /media/WD/test1
как? какой конкретно

Пользователь добавил сообщение 28 Февраля 2017, 16:52:19:
/media/WD/test1 IN_CLOSE_WRITE,IN_MODIFY /home/user/copy_test.sh $#

попробуй вместо $# поставить $@/$#
и параметр $1 заключить в двойные ковычки
« Последнее редактирование: 28 Февраля 2017, 16:52:19 от snowin »

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 900
  • Mate, и никаких Unity
    • Просмотр профиля
как? какой конкретно
png файл скопировал из другой папки.
создал пустой txt открыл записал туда строку и сохранил.

Пользователь добавил сообщение 28 Февраля 2017, 16:59:08:
попробуй вместо $# поставить $@/$#
не сработало
Цитировать
и параметр $1 заключить в двойные ковычки
это не нужно т.к. сам copy_test.sh с параметром работает , проверял отдельно
Но поставил. не помогло


Пользователь добавил сообщение 01 Марта 2017, 06:09:30:
Упустил что службу надо запустить.
Запустил sudo /etc/init.d/incron start
попробовал с такой строкой
/media/WD/test1 IN_CREATE /home/user/copy_test.sh $@/$#
Если в папку test1 бросать мелкие файлы например txt или odf то копирует даже с содержимым в большинстве случаев (один раз скопировался пустой файл)
А вот если в папку бросать большой файл например видео mkv 2Гб то в папку test2 копируется пустой файл размером 0 (интересно, что по умолчанию открывается как текстовый)

Если заменить IN_CREATE на IN_CLOSE_WRITE то срабатывает действительно тогда когда файл залит в test1 полностью.

« Последнее редактирование: 01 Марта 2017, 06:09:31 от jack_solovey »

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 900
  • Mate, и никаких Unity
    • Просмотр профиля
Всем кто помог большое спасибо.

 

Страница сгенерирована за 0.061 секунд. Запросов: 25.