linux – Perl:递归重命名所有文件和目录

前端之家收集整理的这篇文章主要介绍了linux – Perl:递归重命名所有文件和目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要递归重命名每个文件和目录.我将空格转换为下划线,并将所有文件/目录名称设置为小写.如何使以下脚本在一次运行中重命名所有文件?目前,在转换所有文件/目录之前,需要多次运行脚本.代码如下:

#!/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 of find().

但是,您仍然需要决定如何处理命名冲突,因为如果目标存在,重命名将破坏目标.

#!/usr/bin/perl

use strict; use warnings;
use File::Find;

finddepth(\&process_file,$_) for @ARGV;

猜你在找的Linux相关文章