Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按基本名称对文件排序_Sorting_Find - Fatal编程技术网

Sorting 按基本名称对文件排序

Sorting 按基本名称对文件排序,sorting,find,Sorting,Find,查找之后,我想按basename对输出进行排序(目录数未知)。我知道这可以通过将basename从dirname中分离出来并对其进行排序来实现,但我特别希望在排序之前不必修改数据。类似于排序--字段分隔符='/'-k'-1'对于这个任务,我将转向perl和自定义排序函数的使用。将下面的perl代码保存为basename_sort.pl,chmod it 0755,然后您可以执行您请求的命令,如下所示: find | grep "\.php" | ./basename_sort.pl 当然,如果

查找之后,我想按basename对输出进行排序(目录数未知)。我知道这可以通过将basename从dirname中分离出来并对其进行排序来实现,但我特别希望在排序之前不必修改数据。类似于排序--字段分隔符='/'-k'-1'

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

find | grep "\.php" | ./basename_sort.pl
当然,如果您经常这样做,您会希望将该实用程序移动到某个地方。更好的是,我还建议在.bashrc文件中围绕它包装一个函数。(坚持主题,不包括该主题的sh代码)

#/usr/bin/perl
严格使用;
我的@lines=;
@lines=排序basename\u排序@行;
foreach(@行){
打印美元;
}
sub basename_sort(){
my@data1=拆分('/',$a);
my@data2=拆分('/',$b);
我的$name1=$data1[@data1-1];
我的$name2=$data2[@data2-1];
返回信用证($name1)cmp信用证($name2);
}

这可以写得更短

find | perl -e 'print sort{($p=$a)=~s!.*/!!;($q=$b)=~s!.*/!!;$p cmp$q}<>' 查找| perl-e'打印排序{($p=$a)=~s!。*/!!;($q=$b)=~s!。*/!!;$p cmp$q}'
最终的解决方案是简单地将基名称移动到字符串的开头,排序,然后将其移回。这并不是我所希望的,但它甚至适用于古怪的文件名。

p.s.是的,basename_sort()函数可以用匿名块和其他perl语法神秘主义来缩写或消除。。但是,为了达到最佳的清晰性/简单性,它都是严格且不区分大小写的。虽然basename通常并不表示不区分大小写。正是我提到的神秘主义与实用主义的问题,因为这是一个非常多的问题。值得称赞的是它的工作,但我仍然希望看到它的sh函数,以及 find | perl -e 'print sort{($p=$a)=~s!.*/!!;($q=$b)=~s!.*/!!;$p cmp$q}<>'