1
我要搜索以下模式的一個文件中的特定模式:搜索文件使用TCL
debug_abc_xyz_123_$times
或
debug_ad_kdsfj_da_$times
其中這times
是一個變量,我從用戶那裏得到並且是形式:
yyyymmdd-hhmmss-IST
這不起作用:
set fh [open debug_*_$times r]
還有別的辦法嗎?
我要搜索以下模式的一個文件中的特定模式:搜索文件使用TCL
debug_abc_xyz_123_$times
或
debug_ad_kdsfj_da_$times
其中這times
是一個變量,我從用戶那裏得到並且是形式:
yyyymmdd-hhmmss-IST
這不起作用:
set fh [open debug_*_$times r]
還有別的辦法嗎?
您可以使用glob
讓那些遵循這個模式的文件列表(下面,文件必須在同一目錄中的腳本;使用-directory
,給否則路徑):
set files [glob debug_*_$times]
一旦你得到這個,你可以通過列表並打開一個。現在,如果還有更多文件,我不知道你想要打開哪個文件,所以我認爲只有一個。
set fh [open $files r]
由於Hoodiecrow正確地提到,如果文件名中包含可以打破上面的代碼,最好使用lindex
文件中的字符:
set fh [open [lindex $files 0] r]
如果你想獲得最新的文件,你可以使用file mtime
和一個循環來幫助:
set latest_file ""
set latest_date 0
foreach file $files {
set mtime [file mtime $file]
if {$mtime > $latest_date} {
set latest_date $mtime
set latest_file $file
}
}
set fh [open $latest_file r]
如果你有幾個文件在修改日期相同的情況下,上面的按照順序打開第一個,他們是glob
牀。
不,不,我已經生成了許多文件,最後附加了上面給出的時間戳。所以我只需要根據時間戳和彭定康搜索文件。第一個解決方案奏效。謝謝:) – aro
@aro哦,哦,大聲笑。忘了那個。現在保持在這裏不會受傷。別客氣! – Jerry
請注意,即使列表中只有一個文件,如果文件名包含的空格或其他字符在列表中無法加引號,則使用文件列表作爲「open」參數可能會失敗。即使'[llength $ files] == 1',最好使用open [lindex $ files 0]。 –