![添加到网络共享时自动复制文件](https://linux22.com/image/957935/%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%BD%91%E7%BB%9C%E5%85%B1%E4%BA%AB%E6%97%B6%E8%87%AA%E5%8A%A8%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6.png)
我的系统上有一个网络共享,绘图仪扫描仪会将扫描的文件发送到该共享。我该如何编写脚本来自动将新添加的文件复制到另一个文件夹?
答案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。但你也许想添加一些自定义功能。