ls列出按文件名排序的文件,没有扩展名


0

我想列出一堆按名称排序的文件,不包括文件扩展名。我在目录中有这些文件

$ls 
mobility_arXiv.tex
mobility_SR.bbl
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex
paper-hj.tex

我想要输出

mobility_arXiv.tex
mobility_SR.bbl
paper-hj.tex
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex

有没有办法实现这一目标。


1
在Linux中,它不关心它是否是扩展 - 它是文件名的一部分。它恰好是Dash( - )有一个0x2D十六进制代码而Dot有一个0x2E十六进制代码,因此短划线按字母顺序排列
烟灰缸2014年

我假设你的意思是你的第二个片段,以排除'.EXT'部分.. ??
jmetz 2014年

@Ashtray,谢谢你的解释。但是paper-hj-mm.tex之前为什么会在之前列出paper-hj-mm-vp-rkp.tex
imsc 2014年

@imsc真的不能说,但我认为他们对每个字符编码都有一些排序规则。尽管如此,sortls实用程序并没有对文件扩展感到
烟灰缸

@Ashtray确实LANG=C ls会对扩展进行排序,因此对于这个问题来说将是一个简单的解决方案。看到这个答案:stackoverflow.com/a/18451819
Patrick Mevzek

Answers:


2

您可以输出lsinto 的输出cut,这会切割字段,指定“。” 作为分隔符。然后可以通过管道对结果进行排序sort

ls | cut -f 1 -d '.' | sort

如果你需要处理点“。” 在您可以使用的文件名中

ls | rev | cut -d . -f 2- | rev | sort

这通过首先反转ls返回的每个列表,然后切掉第一个(最初的最后一个)字段,然后再次反转来工作。

注意:不能与颜色输出一起使用

如果你想保留扩展名,只需按照你可以使用的文件名的第一部分排序

ls | sort -k 1,1 -t . 

在这里你要说的是使用“。”。作为分隔符并根据键(字段)排序1。


如果我在文件名中有多个点,该怎么办?它可能适用于这种特殊情况,但它根本不具有普遍性
烟灰缸2014年

对不起,我的问题有点令人困惑。我希望排序顺序不同。
imsc 2014年

@Ashtray:更新了点处理。
jmetz 2014年

1
@imsc:我更新了包括排序,以及文件名处理中的点。
jmetz 2014年

@imsc:我还添加了解决方案,如果你想保留扩展名,但只是从文件名的第一部分排序
jmetz 2014年

2

LS命令通过排序文件的文件名的字母顺序默认情况下上升。扩展名是文件名的一部分,所以如果您不需要输出中的扩展名,那么您可以做到最好:

ls | cut -f 1 -d '.' | sort

UPDATE

更好的解决方案:

ls | sort -k 1,1 -t .

这里排序告诉我只使用字段编号1和点作为字段分隔符。所以它忽略了延伸而不是削减它。


有没有办法在排序后恢复扩展?
imsc 2014年

是。刚刚找到了更好的方法。检查我的更新。
drk.com.ar 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.