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

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

1
задан 18 May 2011 в 19:56

2 ответа

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

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

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

Control-x, затем y для сохранения.

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

0
ответ дан 18 May 2011 в 19:56
  • Пусть $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. Но, может быть, вы захотите добавить некоторую функциональность.

0
ответ дан 18 May 2011 в 19:56

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

Похожие вопросы: