动态重命名目录内的文件

动态重命名目录内的文件

我已经在我的无头 12.04 服务器机器上设置了 dropbox,它已正确同步,并且我已经设置了它,以便我可以使用 sendtodropbox.com 应用程序通过电子邮件发送照片。这些都同步到我主机本地的 dropbox 文件夹中~/Dropbox/Attachments/

我想做两件事:

  1. 我希望能够通过电子邮件发送我的 Dropbox 照片,然后将这些文件同步到我的服务器。

  2. 然后将这些文件复制到博客的照片库文件夹。

我遇到的问题是:

  • 我可以创建一个指向 Dropbox 文件夹之外的文件夹的符号链接(指向我博客的照片存储库文件夹),唯一的问题是,照片​​通过电子邮件发送时只有一个文件名,即 photo.jpg(感谢 Apple!)。

这意味着,我需要一个 bash 脚本来在创建名为 photo.jpg 的文件时将其重命名为唯一的名称。

这将允许我上传多张照片,并且能够区分哪些照片是哪些!

我可以很容易地创建一个符号链接,我只是在努力寻找一个解决方案,可以在文件通过 Dropbox 同步到 h 时实时更改文件的名称

答案1

最简单的方法是使用 cron 任务重命名文件。假设你不需要立即的访问你的照片,并可以等待一分钟(看看这里如果不)。

  1. 编写一个脚本,将 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用您的存储库的实际路径替换。

  2. 使脚本可执行:

    $ chmod +x move_photos.sh
    
  3. 创建 crontab

    $ crontab -e
    
  4. 将这一行添加到 crontab:

    * * * * * ~/move_photos.sh
    
  5. 保存并关闭 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出现。

否则,这也应该可以正常工作!

相关内容