多级数字路径排序

多级数字路径排序

我使用的是 Ubuntu 22,我有一个很大的文件树,其中的名称很烦人,其中包含不同位置的数值。就像是:

./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4

我想根据数值对其进行排序,忽略诸如“页面”之类的任何内容,以便我得到:

./1/1
./1/2
./1/11
./2/8
./2/9
./2/10
./11/page 4
./11/page 05
./11/page 6

我已经尝试过sort -n,但即使我只查看一级目录名称,它似乎也没有达到我的预期:

$ find . -mindepth 1 -type d | sort -n
./1
./11
./2

是否有一个方便的花花公子选项“按每个整数(而不是数字)排序”?

答案1

听起来这sort -V就是您想要的,至少考虑到您的示例的简单性:

$ sort -V << EOF
./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4
EOF
./1
./1/1
./1/2
./1/11
./2
./2/8
./2/9
./2/10
./11
./11/page 4
./11/page 05
./11/page 6

一个已知的警告:这不会“忽略”字符串中像“page”这样的文本,它只是将其包含在排序顺序中。如果您有其他带有“行”且编号相同的项目,则“行”条目将排在“页”条目之前。

但总的来说,如果这对您不起作用,请编辑您的帖子并更新您的示例以显示未正确解决的示例案例。

答案2

使用 zsh 及其全局限定符

  • N设置 NULL_GLOB 选项
  • .仅选择纯文件(即省略目录、符号链接、fifos、设备...)
  • n打开 NUMERIC_GLOB_SORT 选项

所以

% print -rC1 -- **/*(N.n)
1/1
1/2
1/11
2/8
2/9
2/10
11/page 4
11/page 05
11/page 6

相关内容