Автоматическое действие удаленной копии папки при изменении локальной копии - PullRequest
0 голосов
/ 03 февраля 2019

РЕДАКТИРОВАТЬ: Я вижу, что кто-то проголосовал за то, чтобы закрыть это как "слишком широкий вопрос", но в последний раз, когда я писал, спрашивая, как сделать что-то, меня попросили предоставить более подробную информацию очто и почему я хотел сделать это.Так что ... не могу победить!Я задаю только один вопрос: «Как действовать удаленная копия папки при изменении локальной копии».Я не спрашиваю, как переименовать, перенумеровать или сделать zip-файлы, а просто объясняю, что это то, что мне нужно сделать как часть копии.Я действительно не могу придумать менее подробный способ задать этот вопрос без очевидного (но неправильного) ответа «просто используйте rsync».

Я хочу автоматически копировать папки на основе завершенной загрузки в папку Dropbox (другие службы могут добавлять файлы тоже) в Ubuntu 18.04.Мне нужно:

  • Оставить исходную папку без изменений.
  • Числовое добавление префиксов к именам файлов, если это еще не сделано - (find . -name '[[:digit:]]*.mp3' и т. Д.)
  • Очистка имен файлов апострофов (например, " detox ").
  • Создать папку на удаленной стороне.
  • Повторное копирование и повторное создание папки zip на удаленной копии, если что-либо изменится в исходной папке в будущем.

Пример: папка SOURCE на 20190203

   apostrophe's.mp3
   track01.mp3
   zebra 4.mp3

УДАЛЕННАЯ папка 20190203 (после обработки)

   01-apostrophes.mp3
   02-track01.mp3
   03-zebra4.mp3
   20190302.zip

Если удаленный пользователь должен был добавить chickens.mp3 и удалить apostrophe's.mp3 в исходной папке aЧерез месяц процесс обновит удаленную папку, повторно скопировав и переименовав папки, и автоматически перестроит zip-файл.

Все отдельные файлы, которые могут быть загружены, имеют размер менее 10 МБ, поэтому даже самый медленныйподключение не может занять более 15 минут для загрузки какого-либо одного файла, но это может занять до 45 минут для загрузки всей папки.

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

В настоящее время у меня есть почасовой crontab, выполняющий скрипт, содержащийОб этом:

SCANDIRS="$(find $BASEDIR -type f -mmin +15 -mmin -45 -printf "%h\\n" | sort -u | xargs -n 1 realpath)"

Затем он перебирает скандиры и делает магию, но это, вероятно, имеет много проблем, которые я не предвидел, может работать только один раз в час, и нене позволяет обновлять более старые папки.

Я знаю, что rsync -av --delete с обычным crontab будет работать, если это будет просто файлов, но я полностью застрял в том, как сделать то, что яхочу.Скопированные папки будут находиться в одной и той же локальной файловой системе (тогда вы можете s3 sync редактировать удаленно, если хотите знать!).

Я думаю, inotifywait может быть решением, но я 'Я не уверен, как решить проблему «подождите, пока папка не будет работать в течение определенного времени, но разрешите будущие обновления в любое время».

Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Подводя итог моим комментариям, простая структура сценария bash для проверки изменений может выглядеть примерно так:

SOURCE=/my/folder/to/check
WORK=/my/state/folder

is_initialised(){
    [ -f "$WORK/timestamp" ]
}

has_changed(){
    find "$SOURCE" -cnewer "$WORK/timestamp" | grep -q .
}

update_timestamp(){
    touch "$WORK/timestamp"
}

if ! is_initialised; then
    do_create_zip && update_timestamp || do_show_error
elif has_changed; then
    do_update_zip && update_timestamp || do_show_error
else
    echo "Nothing to do :)"
fi
...