renameを使用する必要があります。
署名は次のとおりです。
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
}
次のスニペットは、見つかったすべてのファイルに対して、 want内のコードを実行します。あなたがやりたいことをしたいの中にコードのいくつかを完了する必要があります。
編集: 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])
私のPCでスクリプトを試してみましたが、あなたが言及したルールに従って、すべてのディレクトリ、サブディレクトリ、およびファイルを大文字にします。これはあなたが望む動作だと思います。perl バージョンを提供していないことをお詫びします。