首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加文件时运行shell命令

添加文件时运行shell命令
EN

Stack Overflow用户
提问于 2012-06-09 06:19:28
回答 6查看 17.4K关注 0票数 13

我的linux机器上有一个名为images的文件夹。此文件夹已连接到网站,并且该网站的管理员能够将图片添加到此网站。但是,当添加图片时,我想运行一个命令来调整目录中所有图片的大小。

简而言之,我想知道如何在将新文件添加到特定位置时让服务器运行特定命令。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-09 11:27:10

我不知道人们是如何将内容上传到此文件夹的,但您可能希望使用比使用inotify监视目录更低的技术。

如果协议是FTP,且您可以访问FTP服务器的日志,我建议跟踪该日志以查看是否成功上载。这种由事件触发的方法比使用传统cron的轮询方法更快、更可靠、负载更少,而且比使用inotify的方法更易于移植和调试。

您处理此问题的方式当然取决于您的FTP服务器。我有一个正在运行的vsftpd,它的日志中包含这样的行:

代码语言:javascript
复制
Fri May 25 07:36:02 2012 [pid 94378] [joe] OK LOGIN: Client "10.8.7.16"
Fri May 25 07:36:12 2012 [pid 94380] [joe] OK UPLOAD: Client "10.8.7.16", "/path/to/file.zip", 8395136 bytes, 845.75Kbyte/sec
Fri May 25 07:36:12 2012 [pid 94380] [joe] OK CHMOD: Client "10.8.7.16", "/path/to/file.zip 644"

只有当vsftpd成功保存文件时,才会添加UPLOAD行。您可以在shell脚本中解析它,如下所示:

代码语言:javascript
复制
#!/bin/sh

tail -F /var/log/vsftpd.log | while read line; do
  if echo "$line" | grep -q 'OK UPLOAD:'; then
    filename=$(echo "$line" | cut -d, -f2)
    if [ -s "$filename" ]; then
      # do something with $filename
    fi
  fi
done

如果您使用的是HTTP上传工具,请查看该工具是否有用于记录传入文件的文本日志文件。如果它不考虑添加某种类型的记录器函数,那么它将生成您可以tail的日志。

票数 25
EN

Stack Overflow用户

发布于 2012-06-09 10:05:13

就像John评论的那样,inotify API是一个起点,但是您可能会对使用此API执行文件通知任务的一些工具感兴趣:

例如,,它可用于在检测到文件或目录更改时运行类似cron的任务。

或者,这是一组命令行工具,可以用来构建您自己的文件通知shell脚本。

如果你在Wiki pake的底部查看inotify工具,你会看到对更多工具的引用,并支持更高级的语言,如Python、Perl或Ruby (example code)。

票数 4
EN

Stack Overflow用户

发布于 2012-06-09 06:23:59

您可能想看看inotify

inotify API提供了一种监视文件系统事件的机制。Inotify可用于监视单个文件或监视目录。当一个目录被监视时,inotify将返回该目录本身以及该目录中的文件的事件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10956668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档