【问题标题】:how to seach and print realpath version in tcl?如何在 tcl 中搜索和打印 realpath 版本?
【发布时间】:2021-08-02 05:41:03
【问题描述】:

假设路径 x/y/z 有 5 个目录,即 1.1,1.2,1.3,1.4,1.5。现在我只想打印大于 1.1 的目录名称。如果在另一个路径 a/b/c 中存在相同的目录,但缺​​少 1.2 目录,那么它应该打印 1.3,因为下一个目录高于 1.1?如何在 tclsh 中做到这一点???

【问题讨论】:

  • 你说的是那些名字的文件吗?还是字符串?
  • 具有不同版本名称的目录。

标签: unix tcl tclsh


【解决方案1】:

我假设您在这里谈论文件名?目录?

要获取与此类模式匹配的位置的目录列表,您可以使用:

# d for “directory”
set names [glob -directory a/b/c -type d {[0-9]*.[0-9]*}]

这将是随机顺序(嗯,它取决于操作系统中的大量因素,因此假装它是随机的要简单得多!)并且可能其中有一些误报。我们需要过滤和排序。幸运的是,我们有package vsatisfies 来进行解析。

set filtered [lmap name $names {
    try {
        if {[package vsatisfies [file tail $name] 1.1]} {
            set name
        } else continue
    } on error {} continue
}]
# You'll find that dictionary sorting does the Right Thing in this case
set sorted [lsort -dictionary $filtered]

现在剩下的就是将列表中的元素打印出来。其中最大项目为[lindex $sorted end]...

【讨论】:

  • 如果要使用完整路径名,最简单的方法是规范化输入目录。glob -directory [file normalize a/b/c] ...
  • 我在谈论目录。我在谈论目录。假设路径 x/y/z 有 5 个目录,即 1.1,1.2,1.3,1.4,1.5。现在我只想打印大于 1.1 的目录名称。如果在另一个路径 a/b/c 中存在相同的目录,但缺​​少 1.2 目录,那么它应该打印 1.3,因为下一个目录高于 1.1?如何在 tclsh 中做到这一点???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2020-12-29
  • 2020-02-17
相关资源
最近更新 更多