Переименуйте существующий код изображения в базе данных на новый, используя perl / java - PullRequest
0 голосов
/ 29 июня 2011

Я пытаюсь переименовать код для набора изображений в каталогах в базе данных с новым, используя Perl. Код имеет формат XXXX_XXXX_V1.jpg. Все, что мне нужно сделать, это заменить XXXX_XXXX новым кодом, введенным дизайнерами, изображения расположены, скажем, на /usr/site/html/images/p.

Каким должен быть мой подход к работе в этой ситуации? Должен ли я перейти в каталог, а затем найти существующий код в каталогах, а затем выполнить обмен?

после того, как коды поменялись местами, мне нужно сказать «успешно поменять местами картинки», а затем показать представление http://servername/images/p/n/ct/CODE_V1.jpg для всех серверов, чтобы человек мог просматривать картинки, чтобы подтвердить, что операция прошла успешно.

Любые входные данные приветствуются, я изучаю это и скоро вставлю часть кода.

Спасибо

Ответы [ 2 ]

1 голос
/ 29 июня 2011

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

Посмотрите на File :: Find :: Rule как на простое средство поиска и работы с большим количеством файлов в дереве каталогов. Вы можете настроить правила, которые будут включать только файлы, которые соответствуют вашим конкретным требованиям, минуя все остальные. Вы также можете настроить обработчик для тех файлов, которые соответствуют вашим правилам.

Внутри вашего обработчика вы можете выполнить переименование, которое считаете необходимым.

Если все файлы находятся в одном каталоге и не требуется список критериев (или правил), определяющих, какие файлы соответствуют требованиям, вы можете просто использовать opendir и readdir вместе с проверками файлов, такими как -f .

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

Обновление: Я немного поработал, глядя на File :: Find прошлой ночью. Он прошел около 100 000 файлов на моем компьютере с Windows в буквально тысячах каталогов и занял около двух минут. sub wanted просто выполнил простой подсчет файлов и каталогов, чтобы я мог в значительной степени протестировать только эффективность File :: Find. При первом обратном вызове хотел, чтобы скрипт вывел «Started». Я сделал это потому, что исторически я обнаружил, что File :: Find долго запускал свой цикл обратного вызова в Windows с большими файловыми системами.

Затем я запустил тот же сценарий для файловой структуры аналогичного размера на моем компьютере с Linux.

Я обнаружил, что в Strawberry Perl 5.12.2 и $ File :: Find :: VERSION версии 1.15 ошибка, о которой я ранее говорил в комментариях, похоже, устранена. Требуемые обратные вызовы начались почти сразу, тогда как когда я играл с ним с 5.8.x, обратные вызовы проходили долго, прежде чем запускаться. Это на окнах конечно. В Linux у меня никогда не было проблем.

Для сравнения, однако, тестовому сценарию File :: Find, работающему с аналогично сложными деревьями каталогов в моей системе Windows, потребовалось примерно в десять раз больше времени, чтобы пройти 100 000 файлов, как в моей системе Linux, при «первом запуске». Последующие запуски различий были еще более значительными, поскольку Linux, вероятно, занимался кэшированием файловой системы.

В любом случае, я предлагаю, чтобы, если вы используете File :: Find или File :: Find :: Rule, вы удостоверились, что используете последний Perl (5.12.2 или 5.14.1) вместе с File :: Find версия, которая поставляется с более свежим Perl.

0 голосов
/ 18 июля 2011
 #!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use Data::Dumper;
use List::MoreUtils qw/ uniq /;

my $localdir = 'images/p/';
my @filefound;

find(
sub {push @filefound, $File::Find::name if /.jpg$/ },
$localdir);

foreach (@filefound){
my @split = split('_',@filefound);
my @split1 = $split[0];
foreach (@split1) { print "$_  \n";} 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...