如何使用 tcl 搜索仅包含部分文件名的文件
How can I search for a file using tcl, with only part of the file name
如果我有一个包含以下文件的文件夹:
hello-version-1-090.txt
hello-awesome-well-091.txt
goodday-087.txt
hellooo-874.txt
hello_476.txt
hello_094.txt
我如何使用 tcl 搜索包含术语 'hello' 和 '091' 的文件。
可能的解决方案:
在文件夹中获取 ls -l
的输出,用 '\n'
拆分它,然后在每一行上 运行ning 一个 foreach
并使用正则表达式来匹配条件。但是我如何在文件夹中 运行 一个 ls -l
并使用 tcl 记录其保存内容(文件名)?
使用glob
,您可以应用该模式并获得符合我们条件的文件名列表。
puts [ exec ls -l ]; #Just printing the 'ls -l' output
set myfiles [ glob -nocomplain hello*091*.txt ]
if {[llength $myfiles]!=0} {
puts "Following files matched your pattern : "
foreach fname $myfiles {
puts $fname
}
} else {
puts "No files matched your pattern"
}
使用 -nocomplain
的原因是如果没有与我们的搜索模式匹配的文件,则允许返回一个空列表而不会出错。
输出
sh-4.2# tclsh main.tcl
total 4
-rw-r--r-- 1 root root 0 Mar 4 15:23 goodday-087.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello-awesome-well-091.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello-version-1-090.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello_094.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello_476.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hellooo-874.txt
-rw-r--r-- 1 root root 262 Mar 4 15:24 main.tcl
Following files matched your pattern :
hello-awesome-well-091.txt
顺便说一句,关于如何保存 ls -l
输出的查询,只需将输出保存到一个变量即可。
set result [ exec ls -l ]
然后使用 result
变量,您可以像您提到的那样逐行循环应用 regexp
。
但是,我希望使用 glob
会是更好的方法。
参考:glob
如果我有一个包含以下文件的文件夹:
hello-version-1-090.txt
hello-awesome-well-091.txt
goodday-087.txt
hellooo-874.txt
hello_476.txt
hello_094.txt
我如何使用 tcl 搜索包含术语 'hello' 和 '091' 的文件。
可能的解决方案:
在文件夹中获取 ls -l
的输出,用 '\n'
拆分它,然后在每一行上 运行ning 一个 foreach
并使用正则表达式来匹配条件。但是我如何在文件夹中 运行 一个 ls -l
并使用 tcl 记录其保存内容(文件名)?
使用glob
,您可以应用该模式并获得符合我们条件的文件名列表。
puts [ exec ls -l ]; #Just printing the 'ls -l' output
set myfiles [ glob -nocomplain hello*091*.txt ]
if {[llength $myfiles]!=0} {
puts "Following files matched your pattern : "
foreach fname $myfiles {
puts $fname
}
} else {
puts "No files matched your pattern"
}
使用 -nocomplain
的原因是如果没有与我们的搜索模式匹配的文件,则允许返回一个空列表而不会出错。
输出
sh-4.2# tclsh main.tcl
total 4
-rw-r--r-- 1 root root 0 Mar 4 15:23 goodday-087.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello-awesome-well-091.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello-version-1-090.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello_094.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hello_476.txt
-rw-r--r-- 1 root root 0 Mar 4 15:23 hellooo-874.txt
-rw-r--r-- 1 root root 262 Mar 4 15:24 main.tcl
Following files matched your pattern :
hello-awesome-well-091.txt
顺便说一句,关于如何保存 ls -l
输出的查询,只需将输出保存到一个变量即可。
set result [ exec ls -l ]
然后使用 result
变量,您可以像您提到的那样逐行循环应用 regexp
。
但是,我希望使用 glob
会是更好的方法。
参考:glob