添加到网络共享时自动复制文件

添加到网络共享时自动复制文件

我的系统上有一个网络共享,绘图仪扫描仪会将扫描的文件发送到该共享。我该如何编写脚本来自动将新添加的文件复制到另一个文件夹?

答案1

cron并将rsync是我选择的工具。我假设您已通过 naultilus 或其他方法安装了此网络共享。还有其他比通过 Naultilus 更好的安装方法(尤其是用于脚本目的),但我将这留给您自己决定:

打开终端并运行crontab -e。系统可能会要求您选择一个编辑器(nano最简单)。您需要在其中添加一个如下所示的新行:

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

Control-x,然后 y 保存。

~/.gvfs/remote/path/这将使所有内容从每五分钟同步一次 ~/scans/。它不会重新下载未更改的内容。当然,您需要编辑路径,并且可能需要更改 cron 语句的时间。您可能希望将其限制为几小时内,或者更频繁地运行它。

答案2

  • 让它$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。但你也许想添加一些自定义功能。

相关内容