2011-06-29 4 views
0

データベース内のディレクトリ内のイメージのコードの名前を、Perlを使用して新しい名前に変更しようとしています。 コードの形式はXXXX_XXXX_V1.jpgです。私がする必要があるのは、XXXX_XXXXをデザイナーが入力した新しいコードに置き換えることです。画像は、/usr/site/html/images/pと言うことができます。perl/javaを使用してデータベース内の既存のイメージコードの名前を新しいものに変更します。

このような状況に対処するにはどうすればよいですか? ディレクトリに移動し、ディレクトリ内の既存のコードを検索してからスワップを実行する必要がありますか?

コードがスワップされたら、「正常にスワップされた写真」と言い、すべてのサーバーの表示をhttp://servername/images/p/n/ct/CODE_V1.jpgと表示して、ユーザーが写真を見て操作が成功したことを確認できるようにします。

すべての入力を歓迎します。私はこれを検討しており、すぐにコードの一部を貼り付けていきます。私は他の多くの言語が同様にあると仮定して

おかげ

答えて

1

Perlは、タスクに適しています。しかし、すでにPerlを知っていれば、それはあなたにとって非常に簡単な仕事になるでしょう。

File::Find::Ruleを参照すると、ディレクトリツリー内の多数のファイルを見つけて作業する簡単な手段となります。特定の要件に一致するファイルのみを含むルールを設定し、他のルールはすべてバイパスすることができます。ルールに合致するファイルのハンドラを設定することもできます。

ハンドラ内で、必要と思われる名前の変更を行うことができます。

ファイルがすべて1つのディレクトリ内にあり、どのファイルが修飾されるかを決定する基準(またはルール)のリストが必要ない場合は、opendirとreaddirを使用することができます。 f。

あなたが立ち往生している場所を示すコードとコードに関する特定の質問を投稿すれば、実際にはより具体的なヘルプが得られます。尋ねられるように、あなたの質問は、特定の答えを得るには広すぎます。

アップデート:私はファイルを見ていくつかの仕事をしました::最後の夜を見つけてください。それは文字通り何千ものディレクトリにある私のWindowsコンピュータ上の約10万のファイルを横断し、約2分かかった。 sub wantedは単純なファイルとディレクトリのカウントを行ったので、File :: Findの効率だけをテストすることができました。最初のコールバックで、スクリプト出力に "Started"を出力するようにしました。私がこれをしたのは、歴史的に、File :: Findが大きなファイルシステムを持つWindows上で実際にコールバックループを開始するのに時間がかかることがわかったからです。

私はLinuxコンピュータ上で同様のサイズのファイル構造で同じスクリプトを実行しました。

私はStrawberry Perl 5.12.2と$ File :: Find :: VERSION 1.15の下で、私が前にコメントで話したバグが解消されたように見えました。必要なコールバックはほぼ即座に開始されましたが、私が5.8.xでそれを使用していたときにコールバックが起動するまでには長い時間がかかります。もちろんこれは窓の上にあります。 Linuxでは、問題は一度もありませんでした。

しかし、比較すると、私のWindowsシステム上の同様の複雑なディレクトリツリー上で動作するFile :: Findテストスクリプトは、Linuxシステム上の100,000個のファイルを「最初に実行」するのに約10倍の時間がかかりました。その後の違いは、Linuxがおそらくファイルシステムのキャッシングを行っていたためです。

File :: Find、またはFile :: Find :: Ruleを使用すると、最新のPerl(5.12.2または5.14.1)が実行されていることを確認することをお勧めします最新のPerlに付属のFile :: Findバージョン。

+0

私は少しPerlに精通しています、ちょうどブラッシュアップする必要があります! ファイルが別のディレクトリにあるので、そこにすべての基準を入れる必要があると思います。私はすぐにいくつかのコードを掲載します。ありがとう! – uppaljaskaran

+0

だから、ブラッシュアップして始めましょう。これは「私はこのプロジェクトを開始する予定です」ではありません。私はこのプロジェクトに取り組んでおり、具体的な質問をする必要があります。サイト。 – DavidO

+0

ちょっとデイヴィッド、私はそれをperlでやったし、私たちのImageサーバが非常に大きいので、サブディレクトリを横断している間にクラッシュしていたからです。私はjavaと同じディレクトリ内のディレクトリを知っている。 あなたのコメントと指導のおかげで! – uppaljaskaran

0
#!/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";} 
} 
関連する問題