如何在 TCL 中的目录树中搜索以 .so 或 .a 结尾的文件并构建这些目录的列表
How to search a a directory tree in TCL for files that end in .so or .a and build a list of those directories
我正在尝试编写一组 TCL 脚本,作为支持解决方案的一部分,帮助为一组不在其标准 LD_LIBRARY_PATH
中的库设置用户环境。
由于系统在我可以安装的方面相当稀疏,我实际上无法访问任何 TCL 扩展,并且我正在尝试尽可能多地在基本 TCL 中执行此操作。作为一种语言,我对 TCL 也比较陌生。
我想做的是搜索目录结构并找到其中包含 .so
和 .a
文件的目录,构建这些文件的列表,并最终添加它们到用户的 $LD_LIBRARY_PATH
变量。
如果我在 shell 中执行此操作,我会像这样使用查找:
find /dir -type f \( -name "*.so" -o -name "*.a" \) | awk -F/ 'sub(FS $NF,x)' | sort -u
我可以对路径进行硬编码,但我们需要一组脚本来管理多个不同的应用程序。
如有任何想法,我们将不胜感激。
Tcllib has a fileutil 执行递归查找的模块:
package require fileutil
set filenames [::fileutil::findByPattern /dir -glob {*.so *.a}]
foreach filename $filenames {
if {[file isfile $filename]} {
set dirs([file dirname $filename]) 1
}
}
puts [array names dirs]
如果你想使用这个,但不能安装一些东西,你可以把这些程序添加到你的代码中(加上适当的属性)——http://core.tcl.tk/tcllib/dir?ci=63d99a74f4600441&name=modules/fileutil
否则,只需调用系统的find
命令并解析输出(假设您的文件名不包含换行符)。
set filenames [split [exec find /dir -type f ( -name *.so -o -name *.a )] \n]
与提取唯一目录的循环类似。作为附带好处,find
调用实际上更易于阅读,因为您不必转义 shell.
的所有特殊字符
我正在尝试编写一组 TCL 脚本,作为支持解决方案的一部分,帮助为一组不在其标准 LD_LIBRARY_PATH
中的库设置用户环境。
由于系统在我可以安装的方面相当稀疏,我实际上无法访问任何 TCL 扩展,并且我正在尝试尽可能多地在基本 TCL 中执行此操作。作为一种语言,我对 TCL 也比较陌生。
我想做的是搜索目录结构并找到其中包含 .so
和 .a
文件的目录,构建这些文件的列表,并最终添加它们到用户的 $LD_LIBRARY_PATH
变量。
如果我在 shell 中执行此操作,我会像这样使用查找:
find /dir -type f \( -name "*.so" -o -name "*.a" \) | awk -F/ 'sub(FS $NF,x)' | sort -u
我可以对路径进行硬编码,但我们需要一组脚本来管理多个不同的应用程序。
如有任何想法,我们将不胜感激。
Tcllib has a fileutil 执行递归查找的模块:
package require fileutil
set filenames [::fileutil::findByPattern /dir -glob {*.so *.a}]
foreach filename $filenames {
if {[file isfile $filename]} {
set dirs([file dirname $filename]) 1
}
}
puts [array names dirs]
如果你想使用这个,但不能安装一些东西,你可以把这些程序添加到你的代码中(加上适当的属性)——http://core.tcl.tk/tcllib/dir?ci=63d99a74f4600441&name=modules/fileutil
否则,只需调用系统的find
命令并解析输出(假设您的文件名不包含换行符)。
set filenames [split [exec find /dir -type f ( -name *.so -o -name *.a )] \n]
与提取唯一目录的循环类似。作为附带好处,find
调用实际上更易于阅读,因为您不必转义 shell.