实时重命名文件夹内的文件

实时重命名文件夹内的文件

有没有办法在创建文件夹时重命名文件夹内的文件?

我可以每隔几秒运行一个 cron 作业来做一些类似的事情......

find . -name "file.*" -exec sh -c 'echo mv "$1" "$(echo "$1" | sed s/file.*\$/"file-$(date).*"/)"' _ {} \;

但从周期角度来看,这似乎确实很麻烦......

答案1

Linux 中有一个框架,inotify它允许程序注册一个处理程序,每次文件或目录发生变化时都会调用该处理程序,因此如果您正在编写 C 程序,则可以使用它。显然,当发生变化时,您的程序需要正在运行。

有一个特殊的守护进程叫做因克龙它类似于“inotify 的 cron”,能够在文件/目录更改时运行脚本。可以使用 进行安装sudo apt-get install incron,然后您需要在其配置文件中添加几行。

这是一篇有用的文章:Linux incrond inotify:监控目录的变化并采取行动

如果您在 synaptic 中搜索“inotify”,您将找到更多具有类似功能的库和程序。

答案2

因此,使用因克龙,我通过运行来设置它sudo apt-get install incron

我的目标:允许发送到别名(sendtodropbox.com 应用程序)的带有图片附件的电子邮件自动复制到我的博客的照片库中进行发布。

接下来我创建了一个简单的 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(我使用 IN_MOVED_TO 因为 Dropbox 将文件放入 Dropbox 文件夹的操作被视为移动)

现在,当我用手机向 Dropbox 发送一张图片时,此功能立即生效。我还用 root 和我的用户名测试了 incron,以确保它有效,我以我的用户身份进行的第一个测试是:incrontab -e添加配置:~/ IN_CREATE touch ~/test,然后我转到~/,并运行>foo,然后test出现。

相关内容