2017-06-21 50 views
2

我想使用純期望腳本而不調用外部shell來執行tar和rm操作。我目前的結果正在工作,但與外部bash腳本。Expect腳本:如何從中存檔和刪除文件?

P.S.我所有試圖從期望腳本中執行tar或rm的嘗試都失敗了。

主要腳本

#!/usr/bin/expect 
# my scripts folder is here: 
set myhome /home/scripts 
set fullBpath /home/backup/SDH/ 
set date [exec date +%F_%k-%M] 
# Some expect script commands was removed here. 
exec $myhome/zip_clean.sh $fullBpath $date 
send_user "Script terminated.\n" 
exit 

zip_clean.sh

#!/bin/bash 
cd $1 
tar cvzf OME6500-Backup-$2 *.cmp *.inf 
rm *.cmp *.inf 
+0

看看https://stackoverflow.com/questions/ 44559187/ – pynexj

回答

0

可以使用命令file和命令glob。您還 與日期的工作可以用clock

set date [clock format [clock seconds] -format %Y-%m-%d_%k-%M] 
cd $fullBpath 
exec tar cvzf OME6500-Backup-$date [glob *.cmp *.inf] 
file delete [glob *.cmp *.inf] 

enter link description here

+0

'system「cd $ fullBpath; tar cvzf OME6500-Backup- $ rundate.tgz * .cmp * .inf; rm * .cmp * .inf」' –

+0

您的示例會在tar執行過程中產生錯誤。存檔創建空和腳本終止。 –

+0

'glob'返回一個文件名列表,tar期望不是一個列表,而是每個單獨的元素。試試這個:'set files [glob * .cmp * .inf]; set status [catch {exec tar cvzf $ tarfile {*} $ files} output];放置$ output;如果{$ status == 0} {file delete {*} $ files}' - '{*}'語法就地展開列表(參見[rule 5](https://tcl.tk/man/) tcl8.6/TclCmd/Tcl.htm)Tcl的12條語法規則) –

0

發現和測試非常簡單的方法:

system "cd $fullBpath; tar --remove-files -cvzf OME6500-Backup-$rundate.tgz *.cmp *.inf"