Я пытаюсь найти способ упорядочить файлы в папке с
Perl. Основа моего сценария довольно проста. Скрипт читает
вложенных папок в корневой папке, проходит через каждую папку и использует
простое сравнение первых 3 цифр в имени файла с 3
цифровое имя папки. Если они не совпадают, это помещает это в право
место.
Моя проблема в том, что при просмотре файлов я иногда запускаю
в дубликате номер заказа. Потому что заказ уже существует, я
не может перезаписать оригинал, но эти два файла не могут существовать в
то же место по понятным причинам. Так что у меня возникла идея
добавьте слово _TEMP
в конец имени файла, чтобы переместить
их, и они могут быть переименованы позже. Проблема, с которой я сталкиваюсь сейчас
это когда у меня уже есть две копии. Я ищу способ
позволяют тегу TEMP увеличиваться на 1 каждый раз, когда он используется, а затем
обнуляется каждый раз, когда цикл начинается снова. Я просто не очень
уверен, где я должен реализовать эту идею.
Вот основная процедура для скрипта:
foreach my $office (keys %office_names) {
make_junk_folder($office);
# The matches and unmatches come back as array references!
my ($returned_matches, $returned_unmatches) = read_root_folder($office);
foreach my $folder (@$returned_matches) {
my $returned_files = read_subfolder($office, $folder);
foreach my $file (@$returned_files) {
analyze_file($office,$folder,$file);
}
}
foreach my $folder (@$returned_unmatches) {
print "$folder\n";
remove_root_junk($office,$folder);
}
}
Вот подпрограмма, которая обрабатывает перемещение и переименование файла:
sub analyze_file {
my $office = shift;
my $folder = shift;
my $file = shift;
my $order_docs_path = $office_names{$office};
if ($file =~ /^(?<office> (C[AFL]|ME)) (?<folder_num> \d{3})
(?<file_num> \d{3}) ([_|\-] \d+)? \. (?<file_ext> pdf)
$/xmi) {
my $file_office = uc($+{office});
my $folder_num = $+{folder_num};
my $file_num = $+{file_num};
my $file_ext = lc($+{file_ext});
# Change hyphens to a underscore
$file_num =~ s/\-/_/;
my $file_name = "$file_office" . "$folder_num" . "$file_num" .
"\." . "$file_ext";
my $temp_name = "$file_office" . "$folder_num" . "$file_num" .
"_TEMP" . "\." . "$file_ext";
if ($folder != $folder_num) {
# If the folder does not exist create the folder
if (! -e "$order_docs_path\\$folder_num") {
system "mkdir $order_docs_path\\$folder_num";
}
# Check to see if the file already exists
if ( -e "$order_docs_path\\$folder_num\\$file_name") {
# Append the file with a "_TEMP". These files are
# missorted pages belonging to a larger document
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$temp_name");
} else {
# Moves the file to correct place, these are mismatched files
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$file_name");
}
} else {
# Files are in the correct place, the file name will be
# corrected only
rename ("$order_docs_path\\$folder\\$file",
"$order_docs_path\\$folder_num\\$file_name");
}
}
}
Некоторые примеры имен файлов выглядят так:
CF100145.pdf
CA310244.pdf
CL211745.pdf
CL211745_1.pdf (это обозначает вторую страницу из нашего сканера документов)
ME102103.pdf
Если возникают проблемы, когда изменяется одно и то же задание, и вместо того, чтобы поместить файл в нужное место, человек помещает обновленную информацию о задании в папку текущего задания, каталог не соответствует первым 3 числам в файле. Поэтому позже они должны быть отсортированы для устранения ошибок, проблема в том, что в одном офисе более 500 000 документов, и у нас есть 4 офиса.