试图实现以下目标:
1)新文件以相同的文件名上传,但内容新
2) 检查文件中特定字符串并替换它们的事件触发器
3) 文件可以就地保存(可能是循环)或通过修改创建文件的新副本。
对于尝试使用 dievent 和 incron 的事件捕获,两者都可以捕获事件,但是启动命令来查找和替换该文件中的字符串时存在问题。
对于查找和替换功能,尝试使用 sed 和 perl。
SED+INCRON:/path to file folder/ IN_MODIFY /bin/sed -i 's+/pub/+/+g' filename.xml
驱动+PERL:
direvent.conf content
watcher {
path /path to file/;
event write;
command "/usr/bin/perl script.pl";
}
script.pl content
#!/usr/bin/perl
use strict;
use warnings;
perl -pe 's/old_string/new_string' filename.xml
有人可以提出一个想法吗?
答案1
我不太明白你的问题,但我认为你想要的是:
perl -i -pe 's/oldstring/newstring/g' /some/file
如果您在 shell(或 shellscript)中运行此命令,它将替换oldstring
为newstring
/some/file
答案2
请注意,在您的代码中,您搜索“文件夹路径”,但随后忘记了 sed/perl 命令中的该路径(不确定这种情况下的相对路径,但在我的测试中它默认为/
)。
为什么不只使用 incron 监视文件本身并使用
/path/to/file.xml IN_MODIFY,IN_NO_LOOP /bin/sed -i 's+/pub/+/+g' $@
注意:IN_NO_LOOP
是为了防止sed命令在修改时触发相同的事件。