2017-06-21 25 views
2

tarとrmの操作を行うために外部シェルを呼び出さずにpure expectスクリプトを使いたいです。私の現在の結果は機能していますが、外部のbashスクリプトを使用しています。Expectスクリプト:ファイルをアーカイブして削除する方法は?

P.S. expectスクリプトからexec 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}出力]; puts $ output; if {$ status == 0} {ファイルの削除{*} $ファイル} ' - {{*}'構文はリストをその場で展開します([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" 
関連する問題