rename(1)
コマンドを参照してください。それにはいくつかのバリエーションがありますが、それらはすべて、何らかの正規表現に基づいた何らかの名前の変更をサポートしています。
rename 's%ABC%DEF%g' ...
それとも、あなたの例のために:私が使用したバージョン(Perlのラクダブック」の初版からのコードに基づく)として使用される
find . -print0 | xargs -0 rename s/ABC/DEF/g
あるいは、問題を回避するために、あなたは、ディレクトリ構造を横断している間に、パス名は変更して、ディレクトリ名は最初に、その後、(問題のように)ファイルでください:あなたは(行くよう
find . -type d -print0 | xargs -0 rename s/ABC/DEF/g
find . -type f -print0 | xargs -0 rename s/ABC/DEF/g
はまだリネームディレクトリに問題がある可能性がありbecaus e ./ABC
の名前を./DEF
に変更した後は、./ABC/subABC/
から./DEF/subDEF
に名前を変更することはできません。ディレクトリは現在./DEF/subABC
です)。
他のバージョンのrename
では構文が異なります。マニュアルページを確認してください。ここで
はPerlのラクダブック」の初版由来rename
のPerlベースのバージョンです。バージョン管理下に私が持っている最初のバージョンは1992年1月5日の日付を持っています。今日の変更はシェバングライン(ENVを使用して、それが信頼できるものではありませんので、-w
を除去し、無-w
を補うためにuse warnings;
を追加)を更新しました。以前の変更は2008年、1998年、1996年および1992年であった。それは過去19年間であまり変化していません。
#!/usr/bin/env perl
#
# @(#)$Id: rename.pl,v 1.8 2011/06/03 22:30:22 jleffler Exp $
#
# Rename files using a Perl substitute or transliterate command
use strict;
use warnings;
use Getopt::Std;
my(%opts);
my($usage) = "Usage: $0 [-fnxV] perlexpr [filenames]\n";
my($force) = 0;
my($noexc) = 0;
my($trace) = 0;
die $usage unless getopts('fnxV', \%opts);
if ($opts{V})
{
printf "%s\n", q'RENAME Version $Revision: 1.8 $ ($Date: 2011/06/03 22:30:22 $)';
exit 0;
}
$force = 1 if ($opts{f});
$noexc = 1 if ($opts{n});
$trace = 1 if ($opts{x});
my($op) = shift;
die $usage unless defined $op;
if ([email protected]) {
@ARGV = <STDIN>;
chop(@ARGV);
}
for (@ARGV)
{
if (-e $_ || -l $_)
{
my($was) = $_;
eval $op;
die [email protected] if [email protected];
next if ($was eq $_);
if ($force == 0 && -f $_)
{
print STDERR "rename failed: $was - $_ exists\n";
}
else
{
print "+ $was --> $_\n" if $trace;
print STDERR "rename failed: $was - $!\n"
unless ($noexc || rename($was, $_));
}
}
else
{
print STDERR "$_ - $!\n";
}
}
これは特に動作しませんでしたが、私はもっと感謝しています。ディレクトリの名前を変更することもできますか? – Michael
@Michael - 'find'バージョンに 'g'接尾辞を付けるのを忘れました。はい、それはディレクトリの名前を変更することができますが、最初にディレクトリ名を変更してファイル名を変更する方が良いかもしれません。 –
私は同じ名前変更コマンドを使用しているかわかりません。名前を変更するための私のmanページはhttp://linux.die.net/man/1/renameのものと似ています。構文が異なって見えますが、それはあまり強力ではないと思います。あなたの 'rename(1)'は私のディストリビューション(RHEL5)に付属していないと思います。私は 'rename(1)'とそれとは異なる、ubuntuのmanページを見ました。あなたが提案したものにもっと似ています。 – Michael