如何复制或移动多个文件具有相同的扩展?(How to copy or move multiple f

2019-09-25 18:59发布

所以我想用类似的扩展名从/家里搬出一堆文件/到/根/

我试图代码

file copy /home/*.abc.xyz /root/

也试过

set infile [glob -nocomplain /home/*.abc.xyz ]
if { [llength $infile] > 0 } { 
    file copy $infile /root/
}

没有成功。

Answer 1:

你的两个尝试失败的原因不尽相同:

  1. 没有通配符扩展在参数file copy ,或任何Tcl命令,对于这个问题: file copy /home/*.abc.xyz /root/ 。 这将寻找在其文件名文字*的单一来源。

  2. glob -nocomplain /home/*.abc.xyz是确定的收集来源,但glob返回源列表。 file copy要求每个源到作为单独的参数,而不是一个单一的一个通过。 要展开源的文件的单个集合值转换成多个单独的参数,使用的Tcl扩张操作者{*}

因此:

set infiles [glob -nocomplain *.tcl]
if {[llength $infiles]} {
   file copy {*}$infiles /tmp/tgt/
}


Answer 2:

对于1行的答案:

file copy {*}[glob /home/*.abc.xyz] /root/.


Answer 3:

file copy (和file rename )命令有两种形式(因此在注释的参考手册页)。 第一种形式拷贝一个文件到一个新的目标。 第二种形式复制所有文件名参数到一个新的目录,这种形式的命令的坚持,目录名是最后一个参数,你可以有先前的源文件名任意数量。 此外, file copy不会做其参数水珠扩张,从而为你正确地猜测,你还需要使用glob命令来获取要复制的文件列表。 问题是, glob命令返回文件名列表,你通过了列表作为一个参数,即

file copy $infile /root/

通过列表作为单个参数等的file copy命令,认为它在处理第一种形式,并试图找到他的名字相匹配,整个列表的文件。 该文件可能不存在。 放置在你的问题的错误信息会帮助我们肯定知道。

所以,你想要做的是采取包含在文件列表中infile变量,它扩展成单独的参数的话。 由于这是一个常见的情况,TCL有一些语法帮助(你是不是使用Tcl的一些古老的版本假设)。 尝试使用下面的命令:

file copy {*}$infile /root/

在地方的第一次尝试,看看有没有什么帮助的情况。



文章来源: How to copy or move multiple files with same extension?
标签: tcl