所以我想用类似的扩展名从/家里搬出一堆文件/到/根/
我试图代码
file copy /home/*.abc.xyz /root/
也试过
set infile [glob -nocomplain /home/*.abc.xyz ]
if { [llength $infile] > 0 } {
file copy $infile /root/
}
没有成功。
所以我想用类似的扩展名从/家里搬出一堆文件/到/根/
我试图代码
file copy /home/*.abc.xyz /root/
也试过
set infile [glob -nocomplain /home/*.abc.xyz ]
if { [llength $infile] > 0 } {
file copy $infile /root/
}
没有成功。
你的两个尝试失败的原因不尽相同:
没有通配符扩展在参数file copy
,或任何Tcl命令,对于这个问题: file copy /home/*.abc.xyz /root/
。 这将寻找在其文件名文字*的单一来源。
glob -nocomplain /home/*.abc.xyz
是确定的收集来源,但glob
返回源列表。 file copy
要求每个源到作为单独的参数,而不是一个单一的一个通过。 要展开源的文件的单个集合值转换成多个单独的参数,使用的Tcl扩张操作者{*}
因此:
set infiles [glob -nocomplain *.tcl]
if {[llength $infiles]} {
file copy {*}$infiles /tmp/tgt/
}
对于1行的答案:
file copy {*}[glob /home/*.abc.xyz] /root/.
的file copy
(和file rename
)命令有两种形式(因此在注释的参考手册页)。 第一种形式拷贝一个文件到一个新的目标。 第二种形式复制所有文件名参数到一个新的目录,这种形式的命令的坚持,目录名是最后一个参数,你可以有先前的源文件名任意数量。 此外, file copy
不会做其参数水珠扩张,从而为你正确地猜测,你还需要使用glob
命令来获取要复制的文件列表。 问题是, glob
命令返回文件名列表,你通过了列表作为一个参数,即
file copy $infile /root/
通过列表作为单个参数等的file copy
命令,认为它在处理第一种形式,并试图找到他的名字相匹配,整个列表的文件。 该文件可能不存在。 放置在你的问题的错误信息会帮助我们肯定知道。
所以,你想要做的是采取包含在文件列表中infile
变量,它扩展成单独的参数的话。 由于这是一个常见的情况,TCL有一些语法帮助(你是不是使用Tcl的一些古老的版本假设)。 尝试使用下面的命令:
file copy {*}$infile /root/
在地方的第一次尝试,看看有没有什么帮助的情况。