您需要使用重命名。
这是它的签名:
rename OLDNAME,NEWNAME
要使其递归,请将其与File::Find一起使用
use strict;
use warnings;
use File::Basename;
use File::Find;
#default searches just in current directory
my @directories = (".");
find(\&wanted, @directories);
sub wanted {
#renaming goes here
}
下面的代码片段将针对找到的所有文件执行内部想要的代码。你必须完成一些代码里面想做你想做的事情。
编辑:我尝试使用 File::Find 来完成这项任务,但我认为你不能轻易实现它。您可以按照以下步骤成功:
Perl 只是在编写这个脚本时妨碍了我。我用 ruby 写了这个脚本:
require "rubygems"
require "ruby-debug"
# camelcase files
class File
class << self
alias :old_rename :rename
end
def self.rename(arg1,arg2)
puts "called with #{arg1} and #{arg2}"
self.old_rename(arg1,arg2)
end
end
def capitalize_dir_and_get_files(dir)
if File.directory?(dir)
path_c = dir.split(/\//)
#base = path_c[0,path_c.size-1].join("/")
path_c[-1].capitalize!
new_dir_name = path_c.join("/")
File.rename(dir,new_dir_name)
files = Dir.entries(new_dir_name) - [".",".."]
files.map! {|file| File.join(new_dir_name,file)}
return files
end
return []
end
def camelize(dir)
files = capitalize_dir_and_get_files(dir)
files.each do |file|
if File.directory?(file)
camelize(file.clone)
else
dir_name = File.dirname(file)
file_name = File.basename(file)
extname = File.extname(file)
file_components = file_name.split(/\s+/)
file_components.map! {|file_component| file_component.capitalize}
new_file_name = File.join(dir_name,file_components.join(" "))
#if extname != ""
# new_file_name += extname
#end
File.rename(file,new_file_name)
end
end
end
camelize(ARGV[0])
我在我的电脑上尝试了这个脚本,它按照你提到的规则将所有目录、子目录和文件大写。我认为这是您想要的行为。很抱歉没有提供 perl 版本。