如何通过Linux框中的tcl脚本压缩多个文件?

时间:2016-01-11 11:22:03

标签: tcl

我在tcl中设置了一些代码,我试图实现压缩文件,但我收到的错误

zip warning: name not matched: a_1.txt a_2.txt a_3.txt a_4.txt

另一方面,我在命令提示符下做同样的事情我能够成功执行。

#!/usr/local/bin/tclsh

set outdir /usr/test/
set out_files abc.10X
array set g_config { ZIP /usr/bin/zip }
set files "a_1.txt a_2.txt a_3.txt a_4.txt"

foreach inp_file $files {
    append zipfiles "$inp_file "
} 
exec $g_config(ZIP) $outdir$out_files zipfiles 

1 个答案:

答案 0 :(得分:1)

Tcl真正关心单词之间的界限,除非被要求,否则不会拆分。这很好,因为它意味着带有空格的文件名这样的东西不会混淆它,但在这种情况下它会引起一些问题。

要让它拆分列表,请先从变量中读取单词{*}

exec $g_config(ZIP) $outdir$out_files {*}$files

这是 而不是

exec $g_config(ZIP) $outdir$out_files $files
# Won't work; uses "strange" filename

或者这个:

exec $g_config(ZIP) $outdir$out_files zipfiles
# Won't work; uses filename that is the literal "zipfiles"
# You have to use $ when you want to read from a variable and pass the value to a command.

有一个非常旧版本的Tcl {*}不起作用?升级到8.5或8.6!或者至少使用这个:

eval {exec $g_config(ZIP) $outdir$out_files} $files

(如果你在outdir中放置一个空格,你需要括号......)