我在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
提前谢谢
答案 0 :(得分:1)
您可以尝试使用perl。它使用正则表达式在扩展名之前提取最后一个数字,并使用哈希值仅保存编号最大的文件:
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