在Ubuntu中按字母顺序重命名多个文件
Posted
技术标签:
【中文标题】在Ubuntu中按字母顺序重命名多个文件【英文标题】:rename multiple files alphabetical order in Ubuntu 【发布时间】:2017-11-13 06:06:17 【问题描述】:在一个文件夹中,我有多个文件(大约 60K),这些文件具有这样的随机名称,我想按字母顺序重命名所有文件。
jlg6aej.gif
owu46tljff.JPG
28LKG.JPG
uoeoo87967.jpg
....
我知道如何用数字重命名它们,比如
ls | cat -n | while read n f; do mv "f" "$n.txt"; done
现在我想按字母而不是数字重命名它们,所以任何字母顺序都可以,但文件名中请只使用字母,不要使用数字,例如:
aaaa.txt
aaab.txt
aaac.txt
aaad.txt
....
谢谢!
【问题讨论】:
欢迎来到 SO,请展示您的编码工作。 有多少个文件? 大约60000个文件 我知道如何用数字重命名它们,ls |猫-n |读 n f;做 mv "f" "$n.txt";现在完成我想按字母顺序重命名它们 【参考方案1】: 首先,您需要提取所有扩展。 然后,对于每个扩展,您必须重命名所有文件,并增加名称。我已经快速编写了一个 Perl 脚本来实现这一点,因为列表支持比 bash 更容易。
#!/usr/bin/env perl
use strict;
use warnings;
my @files = <*>;
my @extensions = map my ($f) = m/\.(.*?)$/; $f; @files;
my @unique_ext;
my %seen;
foreach my $value (@extensions)
if (! $seen$value)
push @unique_ext, $value;
$seen$value = 1;
use Data::Dumper;
foreach my $current (@unique_ext)
my $start = 'aaaaaa';
my @file_list = <*$current>;
foreach my $file (@file_list)
rename $file, "$start.$current";
$start ++;
仍然需要改进,但当前该版本已重命名我目录中的所有文件(以及 perl 脚本...... :)):
$ ls
LKG.JPG jlgaej.gif owutljff.JPG uoeoo.jpg
$ perl rename.pl
$ ls
aaaaaa.JPG aaaaaa.gif aaaaaa.jpg aaaaaa.pl aaaaab.JPG
【讨论】:
【参考方案2】:仅使用 bash 的一种方式
a=(a..da..za..za..z)
x=0
for i in *;do echo mv "$i" "$a[$((x++))].$i##*.";done
如果您对输出感到满意,请删除回声。
或使用 perl
perl -e '$prefix="aaaa";maprename "$_",$prefix++.".$1" if /.*\.(.*)/ <*>'
【讨论】:
以上是关于在Ubuntu中按字母顺序重命名多个文件的主要内容,如果未能解决你的问题,请参考以下文章