Реорганизация большого количества файлов с помощью регулярных выражений? - PullRequest
1 голос
/ 23 сентября 2011

У меня есть большое количество файлов, организованных в иерархию папок и определенных имен файлов и расширений.Что мне нужно сделать, так это написать программу, чтобы пройтись по дереву файлов и в основном переименовать и реорганизовать их.Мне также нужно сгенерировать отчет об изменениях и информацию о преобразованной организации вместе со статистикой.

Решение, которое я вижу, состоит в том, чтобы пройтись по дереву файлов, как любая другая древовидная структура данных, ииспользуйте регулярные выражения на пути к файлам.Это кажется очень выполнимым и не огромным количеством работы.Мои вопросы: есть ли инструменты, которые я должен использовать, кроме C # и regex?Perl приходит на ум, поскольку я знаю, что изначально он был разработан для генерации отчетов, но у меня нет опыта работы с языком.Кроме того, использование регулярных выражений для этой ситуации жизнеспособно, потому что я использовал его только для СОДЕРЖАНИЯ файла, а не для имени файла и организации.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Да, Perl может сделать это.Вот что-то довольно простое:

#! /usr/bin/env perl

use strict;
use warnings;

use File::Find;

my $directory = ".";   #Or whatever directory tree you're looking for...

find (\&wanted, $directory);

sub wanted {

    print "Full File Name = <$File::Find::name>\n";
    print "Directory Name = <$File::Find::dir>\n"; 
    print "Basename = <$_\n>";

    # Using tests to see various things about the file

    if (-f $File::Find::name) {
        print "File <$File::Find::name> is a file\n";
    }

    if (-d $File::Find::name) {
        print "Directory <$File::Find::name> is a directory\n";
    }

    # Using regular expressions on the file name

    if ($File::Find::name =~ /beans/) {   #Using Regular expressions on file names
        print "The file <$File::Find::name> contains the string <beans>\n";
    }
}

Команда find берет каталог и вызывает подпрограмму wanted для каждого файла и каталога во всем дереве каталогов.Эта подпрограмма должна выяснить, что делать с этим файлом.

Как видите, вы можете выполнять различные тесты для файла и использовать регулярные выражения для анализа имени файла.Вы также можете переместить, переименовать или удалить файл в соответствии с вашими пожеланиями.

Perl будет делать именно то, что вы хотите.Теперь все, что вам нужно сделать, это выучить это.

0 голосов
/ 23 сентября 2011

Если вы можете жить с шаблонами глобусов вместо регулярных выражений, mmv может быть вариантом.

> ls
a1.txt a2.txt b34.txt
> mmv -v "?*.txt" "#2 - #1.txt"
a1.txt -> 1 - a.txt : done
a2.txt -> 2 - a.txt : done
b34.txt -> 34 - b.txt : done

Также можно реорганизовать каталоги на любой глубине.Ознакомьтесь с руководством .Если вы используете Windows, вы можете найти инструмент в Cygwin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...