监视目录中的新子目录
Monitoring a Directory for New Sub Directories
Linux 机器上有一个很大的共享目录,其中包含许多项目。每天一次,我需要确定自前一天以来是否创建了任何新目录。
执行此操作的最佳方法是什么?
有人有什么建议吗?我无法安装额外的工具,更喜欢 Bash 脚本或 Perl 中的东西。理想情况下,我将能够访问 file/directory 创建日期,但似乎只记录了最后修改的日期。
我正在尝试做这样的事情,但我似乎无法对其进行按摩以使其正常工作。必须有一个简单的解决方案。
#!/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
您是对的 - linux 不会(必然)跟踪任何特定的创建时间。所以你需要比较 'before' 和 'after.
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
作为查找选项来对每个文件执行操作,例如 运行 脚本)。
Linux 机器上有一个很大的共享目录,其中包含许多项目。每天一次,我需要确定自前一天以来是否创建了任何新目录。
执行此操作的最佳方法是什么?
有人有什么建议吗?我无法安装额外的工具,更喜欢 Bash 脚本或 Perl 中的东西。理想情况下,我将能够访问 file/directory 创建日期,但似乎只记录了最后修改的日期。
我正在尝试做这样的事情,但我似乎无法对其进行按摩以使其正常工作。必须有一个简单的解决方案。
#!/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
您是对的 - linux 不会(必然)跟踪任何特定的创建时间。所以你需要比较 'before' 和 'after.
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
作为查找选项来对每个文件执行操作,例如 运行 脚本)。