2

フォルダーのツリー全体をトラバースし、すべて (フォルダーを含む) の名前を小文字に変更することになっています。私はかなり周りを見回して、最良の方法は を使用することであることがわかりましたFile::Find。私はこのコードをテストしました:

#!/usr/bin/perl -w

use File::Find;
use strict;

print "Folder: ";
chomp(my $dir = <STDIN>);

find(\&lowerCase, $dir);

sub lowerCase{
    print $_," = ",lc($_),"\n";
    rename $_, lc($_);
}

そしてそれはうまくいくようです。しかし、このコードで問題が発生する可能性があるかどうか、誰か教えてもらえますか? ファイルなどの前にフォルダーの名前を変更したために問題が発生する可能性があるという投稿を覚えています。

4

2 に答える 2

2
  1. コメントが述べているように、 Windowsを使用している場合は、パスDIR1/file1が Windows と同じであるため、ファイルまたはフォルダーの名前を任意の順序で変更しても問題ありませんdir1/file1

    ただし、Unix では問題になる可能性があります。その場合は、手動で再帰 BFS を実行する方がよいでしょう。

  2. また、名前変更などのシステム コールを実行するときは、常に結果を確認します。

     rename($from, $to) || die "Error renaming $from to $to: $!";
    
  3. コメントに記載されているように、「ABC」を「abc」に変更する際は注意してください。Windows では問題ありません。

于 2012-11-16T18:41:40.013 に答える
0

個人的には、次のことを好みます。

  1. を使用して名前を変更するファイルを一覧表示するfind dir/ > 2b_renamed
  2. vim 2b_renamed選択したエディター (私の場合は )を使用して、手動でリストを確認します。
  3. そのリストのCPAN からの名前変更を使用します。xargs rename 'y/A-Z/a-z/' < 2b_renamed

変更を (git または Time Machine を介して) 簡単にロールバックできる場合でも、この手動レビューは私にとって非常に重要です。

于 2012-11-16T19:57:48.610 に答える