The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как найти фалы по дате, !*! Elfin83, 03-Ноя-13, 13:26  [смотреть все]
Необходимо получить массив файлов, созданных в определенную дату.
Дату файла планирую получить как ctime из stat().

Но мне кажется довольно накладным перебирать все файлы в папке и проверять для каждого из них, совпадает ли значение ctime с заданным.

Можно ли сделать как-то проще? Только начинаю разбираться с perl и могу не знать каких-то встроенных функций.

  • Как найти фалы по дате, !*! parad, 14:17 , 03-Ноя-13 (1)
    даже если надешь встроенный функционал - он будет работать через перебор.
  • Как найти фалы по дате, !*! михалыч, 18:26 , 03-Ноя-13 (2)
    > Необходимо получить массив файлов, созданных в определенную дату.
    > Дату файла планирую получить как ctime из stat().
    > Но мне кажется довольно накладным перебирать все файлы в папке и проверять
    > для каждого из них, совпадает ли значение ctime с заданным.
    > Можно ли сделать как-то проще? Только начинаю разбираться с perl и могу
    > не знать каких-то встроенных функций.

    Держи


    #!/usr/bin/perl


    use strict;
    use warnings;


    my @arr;
    my $mytime = "1336368111";
    my $dir = "/usr/home";


    opendir ( DH, $dir ) or die "couldn't open $dir : $!";


    while ( my $file = readdir ( DH ) ) {
        next if $file =~ /^\.\.?$/;
        next if -d "$dir/$file";


        my $mod = ( stat "$dir/$file" )[10];
        push @arr, $file if $mod == $mytime;
    }


    closedir ( DH );


    while ( <@arr> ) { print $_, "\n"; }


  • Как найти фалы по дате, !*! Elfin83, 15:15 , 07-Ноя-13 (4)
    Спасибо всем, скрипт написан. Может быть будет кому-то полезен. Назначение - сортировка кучи файлов по дате создания в дерево папок вида Год/Месяц/День. В этом виде в скрипт передаются 2 параметра: папка - источник файлов, и папка, в которой будет создаваться дерево папок.

    #!/usr/local/bin/perl
    # Фотографии в папке. Раскладвыаем их по дереву папок в соответствии с годом и месяцем создания. Если папка, соотвтетсвующая году или месяцу отстутствует, создаем ее.

    use strict;
    use File::Copy;
    use File::Path;
    use Time::Local;


    # Проверяем, заданы ли необходимые аргументы
    unless (defined $ARGV[0] || defined $ARGV[1])
    {
        print ("При  вызове скрипта необходимо указать аргументы: папка-источник, папка-корень дерева\n");
        die;
    }

    # берем имя папки, если задано аргументом командной строки
    my $sourcedir = $ARGV[0];
    my $photodir = $ARGV[1];

    my $size;
    my @files;
    my $firstfile;
    my $ctime;
    my @time;
    my $year;
    my $month;
    my $day;
    my $filetime;

    sortphoto($sourcedir, $photodir);

    sub sortphoto
    {
        do
        {
            # Получем все файлв в папке. Берем первый файл, определяем для него year, month, day
            @files = glob ("$sourcedir/*.*");
            $firstfile = $files[0];
            $ctime = (stat "$firstfile")[10];
            @time = localtime($ctime);
            $year = 1900 + $time[5];
            $month = 1+ $time[4];
            $day = $time[3];

            # Создаем папку, соответствующую дате (если еще не создана)

            mkpath("$photodir/$year/$month/$day");

            # Ищем файлы, дата которых совпадает с датой создания первого файла
            foreach (@files)
            {
                $filetime = (stat $_)[10];
                if ( $filetime == $ctime)
                {
                    # Переносим файл в папку, соответствующую дате
                    move("$_", "$photodir/$year/$month/$day") or die "The move operation failed: $!";
                }
            }
        
            # Пока в папке sourcedir есть файлы, продолжаем
            # Определяем количество элементов в массиве файлов (берем индекс последнего элемента плюс 1)
            $size = $#files + 1;        
        
        } while ($size > 0);
    }


    Если кто-то найдет ошибки, с удовольствием исправлю. Также жду любых замечаний, недавно изучаю язык, но хотелось бы совершенствоваться.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру