我需要递归重命名每个文件和目录.我将空格转换为下划线,并将所有文件/目录名称设置为小写.如何使以下脚本在一次运行中重命名所有文件?目前,在转换所有文件/目录之前,需要多次运行脚本.代码如下:
#!/usr/bin/perl
use File::Find;
$input_file_dir = $ARGV[0];
sub process_file {
$clean_name=lc($_);
$clean_name=~s/\s/_/g;
rename($_,$clean_name);
print "file/dir name: $clean_name\n";
}
find(\&process_file,$input_file_dir);
最佳答案
您需要指定bydepth =>您传递给查找或调用finddepth的选项中的1.从perldoc File::Find开始:
bydepth
Reports the name of a directory only AFTER all its entries have been reported. Entry point
finddepth()
is a shortcut for specifying{ bydepth => 1 }
in the first argument offind()
.
但是,您仍然需要决定如何处理命名冲突,因为如果目标存在,重命名将破坏目标.
#!/usr/bin/perl
use strict; use warnings;
use File::Find;
finddepth(\&process_file,$_) for @ARGV;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。