将临时文件连接到tcl中的单个文件

时间:2012-12-21 10:54:42

标签: file-io tcl concatenation

我正在尝试将文件夹中的所有临时文件连接到单个文本文件中。但我一直在遇到错误:

 if { [catch { exec cat /tmp/new_temp/* >> /tmp/full_temp.txt } msg] }

错误讯息:

-cat: /tmp/new_temp/*: No such file or directory

如果我在tclsh上尝试相同的事情(没有catch和exec)它可以工作

2 个答案:

答案 0 :(得分:5)

为什么这么糟糕的做法?使用Tcl本身连接​​这些文件:

set out [open /tmp/full_temp.txt w]
fconfigure $out -translation binary
foreach fname [glob -nocomplain -type f "/tmp/new_temp/*"] {
    set in [open $fname]
    fconfigure $in -translation binary
    fcopy $in $out
    close $in
}
close $out

答案 1 :(得分:2)

因为Tcl不是shell,所以它不会自动扩展glob模式。尝试

if { [catch {exec sh -c {cat /tmp/new_temp/* >> /tmp/full_temp.txt}} msg] }

要让Tcl进行文件名扩展,您需要glob命令

set code [catch [list exec cat {*}[glob /tmp/new_temp/*] >> /tmp/full_temp.txt] msg]
if {$code != 0} {
    # handle error
}