Мониторинг каталога для новых подкаталогов

На компьютере с 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 ответ

Решение

Вы правы - 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 В качестве опции поиска можно выполнить действие с каждым из файлов, например, запустить скрипт).

Другие вопросы по тегам