tcl深度递归文件搜索,搜索带有*.c扩展名的文件

2024-02-09

使用旧答案在 tcl 中搜索文件:https://stackoverflow.com/a/435094/984975 https://stackoverflow.com/a/435094/984975

首先我们来讨论一下我现在在做什么: 使用此功能:(归功于杰克逊)

# findFiles
# basedir - the directory to start looking in
# pattern - A pattern, as defined by the glob command, that the files must match
proc findFiles { basedir pattern } {

    # Fix the directory name, this ensures the directory name is in the
    # native format for the platform and contains a final directory seperator
    set basedir [string trimright [file join [file normalize $basedir] { }]]
    set fileList {}

    # Look in the current directory for matching files, -type {f r}
    # means ony readable normal files are looked at, -nocomplain stops
    # an error being thrown if the returned list is empty
    foreach fileName [glob -nocomplain -type {f r} -path $basedir $pattern] {
        lappend fileList $fileName
    }

    # Now look for any sub direcories in the current directory
    foreach dirName [glob -nocomplain -type {d  r} -path $basedir *] {
        # Recusively call the routine on the sub directory and append any
        # new files to the results
        set subDirList [findFiles $dirName $pattern]
        if { [llength $subDirList] > 0 } {
            foreach subDirFile $subDirList {
                lappend fileList $subDirFile
            }
        }
    }
    return $fileList
 }

并调用以下命令:

findFiles some_dir_name *.c

目前的结果:

bad option "normalize": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, lstat, mtime, mkdir, nativename, owned, pathtype, readable, readlink, rename, rootname, size, split, stat, tail, type, volumes, or writable

现在,如果我们运行:

glob *.c

我们得到很多文件,但它们都在当前目录中。

目标是得到ALL文件在ALL计算机上的子文件夹及其路径。 有谁可以帮忙吗?

我真正想做的是找到 *.c 文件数量最多的目录。 但是,如果我可以列出所有文件及其路径,我就可以计算每个目录中有多少个文件,并获取计数最高的文件。


您正在使用旧版本的 Tcl。[file normalize]大约在 2002 年左右在 Tcl 8.4 中引入。已经升级了

如果你不能 - 那么你使用 glob 但只为文件调用它一次,然后遍历目录。请参阅glob -types option.

这是一个演示:

proc on_visit {path} {
    puts $path
}

proc visit {base glob func} {
    foreach f [glob -nocomplain -types f -directory $base $glob] {
        if {[catch {eval $func [list [file join $base $f]]} err]} {
            puts stderr "error: $err"
        }
    }
    foreach d [glob -nocomplain -types d -directory $base *] {
        visit [file join $base $d] $glob $func
    }
}

proc main {base} {
    visit $base *.c [list on_visit]
}

main [lindex $argv 0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tcl深度递归文件搜索,搜索带有*.c扩展名的文件 的相关文章

  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • Django模型递归关系

    为什么要创建递归关系 aField models ForeignKey self 这和上面的一样吗 class aClass models Model aField models ForeignKey aClass 当您希望父节点和子节点具
  • 为什么 GHC 在这里推断出单态类型,即使禁用了单态限制?

    这是由解析 f f pure 的类型 https stackoverflow com questions 55388119 resolving the type of f f pure 55388309 noredirect 1 comme
  • 如何在 Twig 中渲染树

    我想渲染一棵深度不确定的树 孩子的孩子的孩子等 我需要递归地循环遍历数组 我怎样才能在 Twig 中做到这一点 我玩过domi27的想法 https stackoverflow com questions 8326482 how to re
  • 如何从 Unix 命令行递归解压目录及其子目录中的档案?

    The unzip命令没有递归解压缩档案的选项 如果我有以下目录结构和档案 Mother Loving zip Scurvy Sea Dogs zip Scurvy Cures Limes zip 我想将所有档案解压缩到与每个档案同名的目录
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • Lisp 中的十进制到二进制 - 制作非嵌套列表

    当达到我的递归情况时 我使用list将未来结果附加到当前结果 但由于递归 我最终得到一个嵌套列表 当我有一个导致递归超过五次的数字时 这会导致错误 任何想法如何我可以在一个简单的非嵌套列表中获得结果 例如 CL 用户 100 8 gt BI
  • TCL 中的 if 语句

    我对以下代码的 tcl 中的 if 语句有疑问 if number 1 name hello number 0 name yes do something here 上面的代码是有效的 但是如果我这样写 if number 1 name h
  • 将括号子集映射到字符

    我正在尝试创建一个 Scala 方法 该方法将采用一个父括号组 表示为字符串 然后将每个括号子组映射到不同的字母 然后它应该将它们放入它返回的映射中 所以基本上我调用以下方法 如下所示 val s 2 x 3 6 val map mapPa
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 一种递归算法,用于在数组中查找总和为给定整数的两个整数

    我需要一个算法来确定数组是否包含两个总和为给定整数的元素 数组已排序 该算法应该是递归的并且运行时间为 O n 递归步骤应该基于总和 这意味着该方法传递总和并根据最终结果返回 true 或 false 如果找到两个元素 返回 true 否则
  • 如何使用 regexp 来匹配 TCL 中的括号

    我有一个关于在 TCL 中使用正则表达式匹配括号的问题 例如我有一个像这样的字符串 yes it is true and it is fine 我只想匹配这部分yes it is true 如何搭配呢 您可以将括号括在字符类中 如 boba
  • 如何在不进行尾调用优化的情况下用函数式编程替代方案替换 while 循环?

    我正在 JavaScript 中尝试一种更实用的风格 因此 我用诸如map和reduce之类的实用函数替换了for循环 然而 我还没有找到 while 循环的功能替代品 因为尾部调用优化通常不适用于 JavaScript 据我了解 ES6
  • Java-使用递归压平数组

    我一直在练习算法 递归一直是我的弱项 该问题要求将嵌套数组展平为单个数组 如果使用给出 O n 3 给定相同大小的 3d 数组 解决方案的循环 这将很简单 然而 通过递归 我已经挣扎了几个小时 这就是我所拥有的 请注意 我已经尝试过使用我的
  • 求 3D 棋盘中水体积的技巧

    所以我有一个任务 我必须重新创建一个 3D 棋盘 它是一个 RxC 方块网格 每个方块的高度都不同 如果棋盘是不透水的 有人把水倒在棋盘上 直到棋盘无法容纳更多的水 那么它就会容纳固定数量的水 如果板已经容纳了最大体积的水 则倒入板上的任何
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • Tcl 中键盘输入

    如何通过键盘向 Tcl 脚本提供输入 有没有类似的东西scanf in C The gets http www tcl tk man tcl8 5 TclCmd gets htm命令可能就是您想要的 set data gets stdin
  • 递归中的收益回报

    我正在尝试创建一个 IEnumrable
  • 查找并打印 x1+x2+x3=num 的解数

    我需要写一个recusive接收整数的函数num并返回方程 的解数 x1 x2 x3 num where x1 x2 x3是 1 10 之间的数字 该方法应打印所有解决方案 例如如果num 3然后该方法将打印1 1 1并将返回1 if nu

随机推荐