在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中按字母顺序重命名多个文件的主要内容,如果未能解决你的问题,请参考以下文章

命令提示符/批处理 - 使用顺序编号重命名多个文件

VBS 重命名一个文件夹内的全部文件

重命名不带括号的多个文件/删除括号窗口

( 转)Ubuntu下创建重命名删除文件及文件夹,强制清空回收站方法

在 PHPStorm 中重命名文件而不重构

ubuntu /bash 下递归重命名文件和目录