2014-07-04 119 views
1

我要搜索以下模式的一個文件中的特定模式:搜索文件使用TCL

debug_abc_xyz_123_$times 

debug_ad_kdsfj_da_$times 

其中這times是一個變量,我從用戶那裏得到並且是形式:

yyyymmdd-hhmmss-IST 

這不起作用:

set fh [open debug_*_$times r] 

還有別的辦法嗎?

回答

1

您可以使用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牀。

+0

不,不,我已經生成了許多文件,最後附加了上面給出的時間戳。所以我只需要根據時間戳和彭定康搜索文件。第一個解決方案奏效。謝謝:) – aro

+0

@aro哦,哦,大聲笑。忘了那個。現在保持在這裏不會受傷。別客氣! – Jerry

+2

請注意,即使列表中只有一個文件,如果文件名包含的空格或其他字符在列表中無法加引號,則使用文件列表作爲「open」參數可能會失敗。即使'[llength $ files] == 1',最好使用open [lindex $ files 0]。 –