Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何通过tcl复制链接文件_File_Tcl_Trace - Fatal编程技术网

File 如何通过tcl复制链接文件

File 如何通过tcl复制链接文件,file,tcl,trace,File,Tcl,Trace,我想通过tcl编程复制文件,这些文件是链接的。 代码如下: if { [file type $sfile] == "link" } { set fget [file readlink $sfile ] } file copy -force $fget $dir 如果$sfile是一个链接,它就可以工作。如果链接的源文件也是链接,则此操作无效 如何递归跟踪符号链接?递归 while {[file type $sfile] eq "li

我想通过tcl编程复制文件,这些文件是链接的。 代码如下:

if { [file type $sfile] == "link" } {
        set fget [file readlink $sfile ]
         }        
      file copy -force $fget $dir
如果$sfile是一个链接,它就可以工作。如果链接的源文件也是链接,则此操作无效

如何递归跟踪符号链接?

递归

while {[file type $sfile] eq "link"} {
    set newfile [file readlink $sfile]
    if {[string index $newfile 0] ne "/"} {
        set newfile [file dirname $sfile]/$newfile
    }
    set sfile $newfile
}
file copy -force $sfile $dir

嗨,我以前用过这个。我使用这个过程来查找真实的文件,因为给我们的输入是链接中的链接。如果这对你有帮助,请告诉我

proc get_real_link {linkfile} {    
    if {[file type $linkfile] eq "link"} {
       set tempfile [file readlink $linkfile]
    }
    if {[file type $tempfile] eq "link" } {
       get_real_link $tempfile
    } else {
       return $tempfile
    }
}

set realFile [get_real_link "new1.txt"]

#puts "$realFile" 
file copy -force $realFile $dir

假设:new1.txt是初始链接文件。没有像A->B->C->A这样的循环链接

迂腐地说,这是迭代而不是递归谢谢你的帮助,但它不是..错误指出没有这样的文件或目录我有链接到文件B的文件A。文件B也是链接文件,链接到文件C。我想将文件A复制到特定目录。你确定链接没有断开吗?如果是这种情况,那么所有的Tcl魔术都不会有帮助(chroot是一个常见的问题),明智的做法是设置链接遍历次数的限制(例如10次),这样就不会陷入无限循环。或者只需
打开这两个文件,并使用
chan copy
在它们之间传送数据(不会复制其他文件元数据,但如果两个文件都可以解析为真实文件,则会移动内容);在这种情况下,无限循环将得到一个操作系统错误(errorCode:
POSIX ELOOP…
)?(好的,当存在循环链接时,您的解决方案崩溃,我的解决方案将继续运行)