Perl 如何使用随机名称一起重命名多个文件
我有随机名称的文件,我想把它们一起重命名,比如Trace1、Trace2等等。。。。有什么想法吗?您可以使用shell命令:Perl 如何使用随机名称一起重命名多个文件,perl,file-rename,Perl,File Rename,我有随机名称的文件,我想把它们一起重命名,比如Trace1、Trace2等等。。。。有什么想法吗?您可以使用shell命令: i=1; for f in * do mv $f "Trace$i" i=$(($i+1)) done 这将检查是否存在名为Trace 35;的现有文件,并避免对它们进行重击 use Path::Class qw( dir ); use List::Util qw( max ); my $dir = dir(...); my @files =
i=1;
for f in *
do
mv $f "Trace$i"
i=$(($i+1))
done
这将检查是否存在名为
Trace 35;
的现有文件,并避免对它们进行重击
use Path::Class qw( dir );
use List::Util qw( max );
my $dir = dir(...);
my @files =
map $_->basename(),
grep !$_->is_dir(),
$dir->children();
my $last =
max 0,
map /^Trace([0-9]+)\z/,
@files;
my $errors;
for (@files) {
my $old = $dir->file($_);
my $new = $dir->file("Trace" . ++$last);
if (!rename($new, $old)) {
warn("Can't rename \"$old\" to \"$new\": $!\n");
++$errors;
}
}
exit($errors ? 1 : 0);
或者在Perl中:
#!/usr/bin/perl
use strict;
use warnings;
# use dirname() to keep the renamed files in the same directory
use File::Basename qw( dirname );
my $i = 1;
for my $file (@ARGV) {
rename $file, dirname($file) . "/Trace$i";
print "$file -> Trace$i\n";
} continue { $i++ }
如果您是Linux新手,还需要记住使脚本可执行(假设脚本保存在名为random renamer
的文件中):
然后运行它(重命名random files
目录中的所有文件):
“一起重命名”是什么意思?您可以在shell中执行(复制并粘贴它)。但是要小心:现在的代码将重命名当前目录中的所有文件。如果您只需要一组特定的文件(如所有的.txt文件),则将
*
替换为描述它们的列表或其他模式(例如*.txt
)。此外,它假设没有与Trace*
匹配的现有文件。您还可以使用一个过滤Trace
文件的命令轻松地替换*
:f in$(ls*|grep-v^Trace)的。对于一个实际的脚本来说,任务太简单了。@Gingi:如果有带空格的文件名,这将不起作用。驱动for
循环的反勾号通常是有问题的,解析ls
输出基本上总是有问题的<代码>用于f in*;跟踪*)中的案例$f是否继续;;以撒。。。done
是一个很好的解决方法。((i+1))
构造是一种巴什主义。它在基本Bourne shell中不起作用。
chmod 755 random-renamer
./random-renamer random-files/*