gpt4 book ai didi

linux - 可以在 zsh 中结合 glob 排序和交替吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:20 24 4
gpt4 key购买 nike

寻找一个 shell-only[1] 方法来获取这个目录列表:

foo1.1
foo1.10
foo1.10/bar
foo1.2
foo1.3
foo1.3/bar
foo1.4
foo1.5
foo1.5/bar
foo1.6
foo1.7
foo1.8
foo1.9
foo2.1

然后按数字排序返回它,子目录显示在它们的父目录之后:

foo1.1
foo1.2
foo1.3
foo1.3/bar
foo1.4
foo1.5
foo1.5/bar
foo1.6
foo1.7
foo1.8
foo1.9
foo1.10
foo1.10/bar
foo2.1

(*|*/bar)(n) 作为错误模式被拒绝,而 */{,bar}(n) 扩展为 */(n) ~/bar(n) 所以子目录出现在最后。

[1] 我需要它能够在各种各样的系统上工作,所以使用 GNU sort 的 -V 或 GNU ls 的 -v 或类似的东西是行不通的。

最佳答案

您可以轻松地分两步完成:列出,然后排序。

dirs=(* */bar)
dirs=(${(on)dirs})

这依赖于 / 在现有目录的任何后缀之前进行排序,因此如果您的目录名称如 foo1.3-qux (它将在 foo1.3foo1.3/bar 之间排序。由于所有文件都是目录,因此您可以使用临时的 / 后缀,如果 foo1.3-qux 可以排在 foo1.3 之前:

dirs=(*/ */bar)
dirs=(${${(on)dirs}%/})

为了更健壮,您可以暂时用空字节替换 / 字符,这样可以保证先于任何其他字符排序(至少在 C 语言环境中)并且不会出现在文件中姓名。

dirs=(* */bar)
dirs=(${${(on)${dirs//\//$'\0'}}//$'\0'//})

关于linux - 可以在 zsh 中结合 glob 排序和交替吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com