2013-07-03 47 views
1

拥有一个像如何订购ls后缀输出?

GGGG_3.0.3_98/ 
GGGG_3.0.3_d_100/ 
GGGG_3.0.3_d_101/ 
GGGG_3.0.3_d_99/ 
GGGG_3.0.4_104/ 
GGGG_3.0.4_105/ 
GGGG_3.0.4_106/ 
GGGG_3.0_87/ 
GGGG_3.0_89/ 
GGGG_3.0_90/ 
GGGG_3.0_91/ 
GGGG_3.0_92/ 
GGGG_3.0_93/ 
SSS_2.2.3_01/ 
SSS_2.2.3_02/ 
SSS_2.2.3_03/ 
TTT_2.8.3_29/ 

一个LS输出如何获得通过后缀订购的要素是什么?

,有没有任何快速命令我可以用来知道,106是这个例子中的最后一个后缀?

对不起:不清楚在给定示例中的“后缀”是最后一个下划线后的所有内容。

+4

什么是后缀?最后下划线后的所有内容? – chepner

+2

'ls |排序-n -k3,3 -t_'会做到这一点,除了一些目录有3个下划线... – user000001

回答

3
ls ... |awk -F'[_/]' '{f=$(NF-1)>f?$(NF-1):f}END{print f}' 

会给你106

通过后缀进行排序:

ls..|awk -F'[_/]' '{print $(NF-1), $0}'|sort -n|sed 's/.* //' 

注意

  • awk|sort|sed链是没有必要的,AWK可以单独完成, (按asort/asorti)。但它是第一个,(我知道)和快速。

  • 如果文件/目录名称有空格,则可能无效。但它是可以修复的。例如使用不可见的字符作为分隔符。

+1

+1。我的想法正是^^:打印前面的排序字段,并使用排序。你击败了我!我相信它是'ls -1F',所以后面有'/'。或者像'ls -d * /'之类的东西。 –

+0

既完美谢谢! :d –