监视新子目录的目录

时间:2015-06-11 20:14:32

标签: bash perl directory monitor

Linux机器上有一个包含许多项目的大型共享目录。每天一次,我需要确定自前一天以来是否创建了任何新目录。

这样做最好的方法是什么?

有没有人有任何建议?我无法安装其他工具,并且更喜欢Bash脚本或Perl中的某些东西。理想情况下,我可以访问文件/目录创建日期,但似乎只记录上次修改的日期。

我正在尝试做这样的事情,但我似乎无法按摩它才能正常工作。必须有一个简单的解决方案。

#!/bin/bash
cd /home/Project/working

if [ ! -e /tmp/new_games_diff_0 ]
then
    echo "First run... cannot determine if there any new games"
    ls -1 > /tmp/new_games_diff_0
    exit
fi

ls -1 > /tmp/new_games_diff_1
gvimdiff /tmp/new_games_diff_1 /tmp/new_games_diff_0 &

cp /tmp/new_games_diff_1 /tmp/new_games_diff_0

1 个答案:

答案 0 :(得分:4)

你是对的 - linux不一定(必然)跟踪任何特定的创建时间。因此,您需要比较“之前”和“之后”。

Perl有一个很好的机制,以哈希的形式和内置的Storable模块。

#!/usr/bin/perl

use strict;
use warnings;

use Storable;

my $path    = "/home/Project/working";
my $seen_db = "~/.seen_files";

my %seen;
if ( -f $seen_db ) { %seen = %{ retrieve $seen_db } }

foreach my $entry ( glob("$path/*") ) {
    if ( -d $entry ) {
        print "New entry: $entry\n" unless $seen{$entry}++;
    }
}

store( \%seen, $seen_db );

如果你想在你的数据库中存储一些文件元数据 - 比如mtime,那么值得查看stat函数。

然而,这可能有点过分 - 因为您可能只是发现find会起作用:

find /home/Project/working -mtime -1 -type d -maxdepth 1 -ls

(您还可以使用-exec作为查找选项对每个文件执行操作,例如运行脚本。