perl - 重命名 File::Find 文件夹遍历中的项目

标签 perl recursion tree

我应该遍历整个文件夹树并将所有内容(包括文件夹)重命名为小写。我环顾四周,发现最好的方法是使用 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($_);
}

而且看起来效果很好。但是谁能告诉我这段代码是否会遇到麻烦?我记得关于我可能会因为在文件之前重命名文件夹或类似的事情而遇到麻烦的帖子。

最佳答案

  1. 如果您在 Windows 上,如评论所述,那么不,以任何顺序重命名文件或文件夹都不会出现问题,因为路径 DIR1/file1 与 Windows 中的 dir1/file1 相同。

    不过,这在 Unix 上可能是个问题,在这种情况下,您最好手动执行递归 BFS。

  2. 此外,在执行重命名等系统调用时,始终检查结果:

     rename($from, $to) || die "Error renaming $from to $to: $!";
    
  3. 如评论中所述,请注意将“ABC”重命名为“abc”。在 Windows 上这不是问题。

关于perl - 重命名 File::Find 文件夹遍历中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421526/

相关文章:

java - 递归地将节点添加到二叉搜索树,但有错误

java - 如何优化此递归回溯算法?

javascript - 根据子节点数量动态调整 d3 树布局的大小

c++ - B+树节点实现

linux - 如何将 perl 模块转换为 deb 包?

perl - 打印 Perl 数组的简单方法? (有一点格式化)

perl - 为什么使用警告 FATAL => 'all' 似乎不起作用?

perl - 使用 JSON-RPC 协议(protocol)的 Perl Client to API 使用哪些模块?

list - 跟踪序言代码

c - C 中没有任何空叶的树