2016-01-13 4 views
0

Я пытаюсь заархивировать файлы из каталога с помощью Tcl, но я могу заархивировать только один файл, но остальные три файла (a_2.txt, a_3.txt, a_4.txt) не могут zip.I хочу zip все файлы во время. С другой стороны, я делаю то же самое из командной строки, которую я могу выполнить успешно.Как закрепить несколько файлов через tcl-скрипт?

directory 
    a_1.txt 
    a_2.txt 
    a_3.txt 
    a_4.txt 


    #!/usr/local/bin/tclsh 

    set dir /usr/test/abc/    
    array set g_config { ZIP /usr/bin/zip } 

    proc zippingfile { files } { 
    set out_files abc.10X 
    set outdir /usr/test/out/ 

    exec $g_config(ZIP) $outdir$out_files $files 

     } 

    set filenames [exec ls $dir] 
    cd $dir 

    foreach line $filenames { 
    append files "$line " 
# the value of files should be a_1.txt a_2.txt a_3.txt a_4.txt 
     }  

    zippingfile $files 

ответ

0
array set g_config { ZIP /usr/bin/zip } 

proc zippingfile { files } { 
    global g_config 
    set out_files abc.10X 
    set outdir /usr/test/out 
    exec $g_config(ZIP) [file join $outdir $out_files] {*}$files 
} 

set dir /usr/test/abc/    
cd $dir 
set files [glob *] 
zippingfile $files 

Примечание:

  • работать на вашем отступе
  • вам нужна команда global для доступа к глобальному ВАРУ из прока
  • знать о разнице между строками и списками
    • Вам необходимо перейти к с отдельными аргументами файла до zip, а не с одним списком или с одной строкой.
  • don't parse ls, использовать Tcl встроенные glob