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