Я работаю над машиной Windows, и у меня есть каталог, заполненный ~ 200 тыс. Файлов, которые мне нужно организовать. Это задание, которое мне нужно будет делать регулярно с разными наборами файлов, но с похожими шаблонами, поэтому perl казался хорошим инструментом для использования.Организация файлов в окнах с использованием perl
Каждое имя файла состоит из {струнный A} {2 или 3 значное число B} {одной буквой "г" или "х"} {3} значное число .extension
Я хочу, чтобы создать папка для каждой строки
в каждой папке я хочу вложенную папку для каждого B
затем я хочу, чтобы переместить каждый файл в его соответствующую подпапку
Так это будет в конечном итоге выгляжу что-то вроде
/CustomerA/1
/CustomerA/2
/CustomerA/3
/CustomerB/1
/CustomerB/2
/CustomerB/3
и т.д. с файлами в каждой подпапке
так CustomerA888x123.xml перемещается в/customerÃ/888/
У меня есть список файлов в массив, но я борюсь с расщеплением вывести имя файла в его составные части и эффективно использовать детали.
Спасибо за ответ. Я закончил с этим:
#!usr/bin/perl
use warnings;
use strict;
use File::Copy qw(move);
use File::Path qw(make_path);
opendir my $dir, ".";
my @files = readdir($dir);
closedir $dir;
foreach my $file (@files) {
my ($cust, $num) = $file =~ m/(\D+)(\d+)/;
my $dirname = "$cust/$num";
my @dirs_made = make_path($dirname, { verbose => 1 });
move($file, $dirname) or warn "cant move $file to $dirname: $!";
}
Вам нужно будет показать программу, которую вы пробовали, прежде чем мы сможем ее исправить. – Borodin
Я редактировал код в вашем вопросе, чтобы добавить некоторые отступы и пустые строки для удобства чтения. Если вам это не нравится, пожалуйста, отбросьте его обратно - нажмите «_edited ..._» (над именем пользователя), а затем нажмите «_rollback_» в предыдущей версии. – zdim
это здорово, спасибо. В коде, который я написал, есть пустые строки и больший отступ, но когда я вставлял его в качестве комментария, форматирование получило немного грушевидной формы, поэтому я удалил пустые строки, думая, что это вызывает проблемы с форматированием. Снова, большое спасибо. – Steve