Автоматическое копирование файлов при добавлении в сетевой ресурс

В моей системе есть сетевой ресурс, на который наш сканер плоттеров отправляет отсканированные файлы. Как я могу написать скрипт для автоматического копирования вновь добавленных файлов в другую папку?

2 ответа

cron а также rsync были бы мои инструменты выбора. Я собираюсь предположить, что вы подключили эту сетевую папку с помощью naultilus или другого метода. Существуют и другие, более эффективные способы монтирования, чем с помощью Naultilus (особенно для сценариев), но я оставлю это на ваше усмотрение:

Откройте терминал и запустите crontab -e, Вас могут попросить выбрать редактора (nano проще всего). Там вы хотите добавить новую строку, которая выглядит примерно так:

*/5 * * * * rsync -avz ~/.gvfs/remote/path/ ~/scans/

Control-x, затем y, чтобы сохранить.

Это будет синхронизировать все от ~/.gvfs/remote/path/ в ~/scans/ каждые пять минут. Это не будет повторно загружать вещи, которые не изменились. Конечно, вы захотите отредактировать пути и, возможно, захотите изменить время для выражения cron. Возможно, вы захотите ограничить его в часах или запускать чаще.

  • Позволять $share содержит путь к вашей "папке (...), в которую наш сканер плоттеров отправляет отсканированные файлы"
  • Позволять $afolder содержать путь к вашей "другой папке"

Мой упрощенный подход заключается в том, чтобы сохранить список файлов в $share, Напишите скрипт, который проверяет, находятся ли файлы в данный момент $share находятся в этом списке. Это не так, они должны быть новыми и должны быть перемещены. Затем добавьте этот скрипт в cron Таким образом, работает это регулярно.

Позволять $filelist содержать путь к указанному списку файлов.

Скрипт (не проверенный - просто шаблон):

#!/bin/bash

...variables as discussed....
filelist=/some/path/to/the/aforementioned/filelist

find "$share" -type f >> /tmp/foundfiles
while read fnd; do  #walk files in folder
    isinlist=""
    while read listitem; do  #walk listitems
        if [ "$fnd" -ef "$listitem" ]; then
            echo "$fnd Allready in list."
            isinlist="inlist"
        fi
    done < "$filelist"
    if [ ! -n "$isinlist ]; then
        echo "$fnd" >> "$filelist"
        cp "$fnd" to "$afolder"
    fi
done < /tmp/foundfiles
rm /tmp/foundfiles
exit 0

Есть инструменты, которые делают это для вас, например, rsync. Но, может быть, вы хотите добавить некоторые пользовательские функции.

Другие вопросы по тегам