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 上,如评论所述,那么不,以任何顺序重命名文件或文件夹都不是问题,因为路径与 WindowsDIR1/file1相同。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 回答