我已经在我的无头 12.04 服务器机器上设置了 dropbox,它已正确同步,并且我已经设置了它,以便我可以使用 sendtodropbox.com 应用程序通过电子邮件发送照片。这些都同步到我主机本地的 dropbox 文件夹中~/Dropbox/Attachments/
。
我想做两件事:
我希望能够通过电子邮件发送我的 Dropbox 照片,然后将这些文件同步到我的服务器。
然后将这些文件复制到博客的照片库文件夹。
我遇到的问题是:
- 我可以创建一个指向 Dropbox 文件夹之外的文件夹的符号链接(指向我博客的照片存储库文件夹),唯一的问题是,照片通过电子邮件发送时只有一个文件名,即 photo.jpg(感谢 Apple!)。
这意味着,我需要一个 bash 脚本来在创建名为 photo.jpg 的文件时将其重命名为唯一的名称。
这将允许我上传多张照片,并且能够区分哪些照片是哪些!
我可以很容易地创建一个符号链接,我只是在努力寻找一个解决方案,可以在文件通过 Dropbox 同步到 h 时实时更改文件的名称
答案1
最简单的方法是使用 cron 任务重命名文件。假设你不需要立即的访问你的照片,并可以等待一分钟(看看这里如果不)。
编写一个脚本,将 photos.jpg 从 dropbox 文件夹移动到你的存储库,并将其另存为
year-month-day_hour_minutes_seconds.jpg
。在你最喜欢的文本编辑器中创建一个名为的文本文件move_photos.sh
,并将以下几行粘贴到其中:#!/bin/bash date=`date +%F"_"%H_%M_%S`; mv /Dropbox/Photos/photo.jpg /path/to/repo/$date.jpg
显然,
/path/to/repo
用您的存储库的实际路径替换。使脚本可执行:
$ chmod +x move_photos.sh
创建 crontab
$ crontab -e
将这一行添加到 crontab:
* * * * * ~/move_photos.sh
- 保存并关闭 crontab 编辑器窗口。
这将导致 move_photos.sh 脚本每分钟运行一次。由于文件名包含秒数,因此不应该有两个同名的文件。
答案2
我发现了一个有趣的工具,叫做因克龙,所以我通过运行来设置它sudo apt-get install incron
。简单来说incron
就是:
此程序是一个“inotify cron”系统。它由一个守护进程和一个表操作器组成。您可以像使用常规 cron 一样使用它。不同之处在于 inotify cron 处理文件系统事件而不是时间段。
接下来我创建了一个简单的 bash 脚本:
#!/bin/bash
ls photo.JPG | while read a; do mv $a "$(echo "$a" | sed s/photo.JPG/"photo$(date +%a%b%d%H%M).jpg"/)"; done
mv photo* ~/Dropbox/Attachments /<photo repo>/
我将脚本放在 中~/
,然后编辑/etc/incron.allow
文件以包含我的用户名,因为这些脚本和文件都在我的主目录中。接下来我必须通过运行 来编辑 incron 配置文件incrontab -e
。
在这里我使用了~/Dropbox/Attachments/ IN_MOVED_TO ~/script.sh
(因为 Dropbox 文件进入目录的操作是移动)
现在,当我用手机向 Dropbox 发送一张图片时,此功能立即生效。我还用 root 和我的用户名测试了 incron,以确保它有效,我以我的用户身份进行的第一个测试是:incrontab -e
添加配置:~/ IN_CREATE touch ~/test
,然后我转到~/
,并运行>foo
,然后test
出现。
否则,这也应该可以正常工作!