如何查找文件名中编号最大的文件

时间:2014-05-07 20:29:03

标签: linux bash file

我在linux服务器上有一个文件夹,里面有一堆文件,每次修改一个文件时,都会得到一个新的编号。有很多文件,可以进行很多修改。这不需要递归,因为文件存储在平面文件系统中

我想要一个命令给我一个编号最高的文件列表。

file1.rtf
file2.rtf
file3.rtf
file_1.doc
file_2.doc
anotherfile1.txt
anotherfile2.txt
someotherfile1.rtf
someotherfile2.rtf
someotherfile12.rtf

我希望得到一个像...这样的文件列表。

file3.rtf
file_2.doc
anotherfile2.txt
someotherfile12.rtf

提前谢谢

2 个答案:

答案 0 :(得分:1)

您可以尝试使用。它使用正则表达式在扩展名之前提取最后一个数字,并使用哈希值仅保存编号最大的文件:

perl -e '
    for ( @ARGV ) { 
        next unless m/\A(.*?)(\d+)(\.[^.]+)\Z/;
        $key = $1 . $3;
        if ( ! exists $file{ $key } or $file{ $key }->[0] < $2 ) {
            $file{ $key } = [$2, $_];
        }
    }
    for $f ( keys %file ) {
        printf qq|%s\n|, $file{ $f }->[1];
    }
' *

假设当前目录包含您在问题中提供的文件,则会产生:

anotherfile2.txt
file_2.doc
file3.rtf
someotherfile12.rtf

答案 1 :(得分:1)

for f in *; do 
    [[ $f =~ ([^0-9]+)([0-9]+) ]] && echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/$f"
done | 
sort -t/ -k1,1 -k2,2rn | 
awk -F/ '!seen[$1]++ {print $3}'
anotherfile2.txt
file3.rtf
file_2.doc
someotherfile12.rtf