按basename排序文件

时间:2010-11-23 11:35:21

标签: sorting find

在查找之后,我想按basename对输出进行排序(目录数量未知)。我知道这可以通过从dirname拆分basename并对其进行排序来完成,但我特意寻找的东西是在排序之前没有必要修改数据。类似于sort --field-separator='/' -k '-1'

3 个答案:

答案 0 :(得分:1)

对于此任务,我将转向perl并使用自定义排序功能。将下面的perl代码保存为basename_sort.pl,chmod为0755,然后您可以执行如您所请求的命令,如下:

find | grep "\.php" | ./basename_sort.pl

当然,如果您经常这样做,您会想要将该实用程序移动到某处。更好的是,我还建议在.bashrc文件中包装一个函数。 (坚持主题,不包括的代码)

#!/usr/bin/perl

use strict;

my @lines = <STDIN>;
@lines = sort basename_sort @lines;
foreach( @lines ) {
   print $_;
}

sub basename_sort() {
   my @data1 = split('/', $a);
   my @data2 = split('/', $b);
   my $name1 = $data1[@data1 - 1];
   my $name2 = $data2[@data2 - 1];
   return lc($name1) cmp lc($name2);
}

答案 1 :(得分:0)

这可以写得更短。

find | perl -e 'print sort{($p=$a)=~s!.*/!!;($q=$b)=~s!.*/!!;$p cmp$q}<>'

答案 2 :(得分:0)

结束了简单地将基本名称移动到字符串开头,排序并将其移回的解决方案。不是我真正希望的,但它甚至可以用于weirdzo文件名。