我应该遍历整个文件夹树并将所有内容(包括文件夹)重命名为小写。我环顾四周,看到最好的方法是使用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($_);
}
它似乎工作正常。但有人可以告诉我,如果我可能遇到这个代码的麻烦?我记得有关我如何因为在文件之前重命名文件夹或类似事件而遇到麻烦的帖子。
答案 0 :(得分:2)
如果你在Windows上 ,正如评论所述,则不会,任何顺序重命名文件或文件夹都不会有问题,因为路径DIR1/file1
是与Windows dir1/file1
相同。
但是在Unix上可能会出现问题,在这种情况下你最好手动做一个递归的BFS。
此外,在进行重命名等系统调用时,总是检查结果:
rename($from, $to) || die "Error renaming $from to $to: $!";
如评论中所述,请注意将“ABC”重命名为“abc”。在Windows上不是问题。
答案 1 :(得分:0)
就个人而言,我更喜欢:
find dir/ > 2b_renamed
vim 2b_renamed
)xargs rename 'y/A-Z/a-z/' < 2b_renamed
手动审核对我来说非常重要,即使我可以轻松回滚更改(通过git甚至是Time Machine)。