我想通過tcl proggraming複製文件,這些文件是鏈接的。 這是代碼:如何通過tcl複製鏈接的文件
if { [file type $sfile] == "link" } {
set fget [file readlink $sfile ]
}
file copy -force $fget $dir
它工作,如果$ sfile是一個鏈接。如果鏈接的源文件也是鏈接,這不起作用。
我該如何遞歸追蹤符號鏈接?
我想通過tcl proggraming複製文件,這些文件是鏈接的。 這是代碼:如何通過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- B-> C- C-> A。
因此,這和我做的事情基本上是一樣的,添加一些不必要的額外文件類型檢查,使用了堆棧,除了我的解決方案沒有其他好處嗎? (好吧,當有循環鏈接時,你的解決方案會崩潰,我的意志會繼續前進並運行) – 2013-05-16 12:38:21
從[tcllib的'fileutil'模塊](http://core.tcl.tk/tcllib/doc/trunk/embedded/www/toc1.html) – 2013-05-09 19:48:43