他の多くの言語も同様であると私は思うので、Perlはこのタスクに非常に適しています。ただし、すでにPerlを知っている場合は、非常に簡単な作業になります。
ディレクトリツリー内の多数のファイルを検索して操作する簡単な方法として、File :: Find::Ruleを見てください。他のすべてをバイパスしながら、特定の要件に一致するファイルのみを含むルールを設定できます。ルールを満たすファイルのハンドラーを設定することもできます。
ハンドラー内で、必要と思われる名前の変更を行うことができます。
ファイルがすべて1つのディレクトリ内にあり、どのファイルが適格であるかを決定する基準(またはルール)のリストが必要ない場合は、-fなどのファイルチェックとともにopendirとreaddirを使用できます。
行き詰まっている場所を示すコードと、コードに関する具体的な質問を投稿すると、実際にはより具体的な支援を受けることができます。あなたの質問は、尋ねられたように、特定の答えを得るには広すぎます。
更新: 昨夜File::Findを見て作業をしました。それは文字通り何千ものディレクトリにある私のWindowsコンピュータ上の約100,000のファイルをトラバースし、約2分かかりました。 sub wanted
単純なファイルとディレクトリのカウントを行っただけなので、File::Findの効率のみをテストできました。スクリプトに「開始」を出力させたい最初のコールバック。私がこれを行った理由は、歴史的に、File::Findが大きなファイルシステムを備えたWindowsで実際にコールバックループを開始するのに長い時間がかかることに気付いたためです。
次に、Linuxコンピューターの同じサイズのファイル構造で同じスクリプトを実行しました。
StrawberryPerl5.12.2と$File:: Find :: VERSION of 1.15の下で、以前コメントで話したバグが解消されたように見えることがわかりました。必要なコールバックはほぼすぐに開始されましたが、5.8.xで遊んでいた場合、コールバックは起動するまでに長い時間がかかりました。もちろんこれは窓にあります。Linuxでは、問題は発生しませんでした。
ただし、比較として、Windowsシステムで同様に複雑なディレクトリツリーで動作するFile :: Findテストスクリプトは、「初回実行」時にLinuxシステムで100,000ファイルをトラバースするのに約10倍の時間がかかりました。その後の実行では、Linuxがおそらくファイルシステムのキャッシュを行っていたため、違いはさらに劇的でした。
とにかく、File::FindまたはFile::Find :: Ruleを使用する場合は、File ::とともに最近のPerl(5.12.2または5.14.1)を実行していることを確認することをお勧めします。その最新のPerlに付属しているバージョンを見つけてください。