我有一个目录,其中有一些特定扩展名的文件和其他文件 文件。
根据特定扩展名的修改日期,我需要最后五个文件。
如果超过5种,则只打印最后5个,如果少于5个 那种,打印全部。
你能帮我写一下这个tcl代码吗?
示例1 :
由于此示例中的.abc
个文件少于5个,因此我们需要按照与上次修改日期相反的顺序收集所有文件:
目录:TESTCASE
文件:
- apple_12.abc_no
- banana.abc
- dog.xyz
- place.txt
- sofa_1_2_12.abc
- hello.org
输出:
- sofa_1_2_12.abc
- banana.abc
- apple_12.abc_no
示例2:
由于此示例中有超过5个.abc文件,因此我们需要以与上次修改日期相反的顺序排列最后五个:
文件:
- apple_12.abc_no
- banana.abc
- dog.xyz
- place.txt
- sofa_1_2_12.abc
- hello.org
- world.abc
- stack_133_gre.abc
- potato.txt
- onsite_all.abc
- list.abc
输出:
- list.abc
- onsite_all.abc
- stack_133_gre.abc
- world.abc
- sofa_1_2_12.abc
我尝试通过glob命令从目录.abc
中查找TESTCASE
个文件:
set PWD $pwd
set files [glob -tails -directories $PWD/$TESTCASE/*.abc*]
puts $files
但如何尾巴持续五次或更少,是我被困的地方。我们在unix中尝试tail -f filename
。在tcl中有没有办法做到这一点?
答案 0 :(得分:1)
您当前的代码存在一些问题。试试这个:
# Proc to get latest 5 modified files
proc get_latest {pwd files} {
# Container for these files
set newList [list]
# Loop through each files and get the modified date
foreach f $files {
lappend newList [list $f [file mtime $pwd/TESTCASE/$f]]
}
# Sort the list on date, putting latest first
set newList [lsort -decreasing -index 1 $newList]
# Return top 5
return [lrange $newList 0 5]
}
# Get path of script
set PWD [pwd]
# Get files with extension
set files_with_ext [glob -tails -directory $PWD/TESTCASE *.abc*]
# Get top 5 files
set top_five [get_latest $PWD $files_with_ext]
# Finally print the file names, removing the introduced timestamps.
foreach f $top_five {
puts [lindex $f 0]
}