Linux:使用expect脚本压缩所有具有相同后缀的文件

时间:2015-03-25 06:46:50

标签: linux expect

文件夹中的文件列表:

$ ll * txt

-rw-rw-rw- 1 psawant CVS_GROUP 32 Mar 25 13:34 File.txt
-rw-rw-rw- 1 psawant CVS_GROUP 51 Mar 25 13:34 File_Changes.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file1.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file2.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file3.txt

期望脚本使用固定名称和所有其他带有前缀" file"的文件来tar。 :

$ cat tar.exp

#!/usr/bin/expect -f

set timeout -1
match_max 100000

set PWD "12345"

set FILE1 "File.txt"
set FILE2 "File_Changes.txt"

spawn zip -e -j ZIP.zip $FILE1 $FILE2 file*
expect "Enter password:"
sleep 1
send -- "$PWD\r"
sleep 1
expect "Verify password:"
sleep 1
send -- "$PWD\r"
sleep 3
interact

当我从脚本运行它时,它会将文件*视为文件名,但是当我使用相同的spawn命令并直接运行它时,它会起作用。

$ tar.exp
spawn zip -e -j ZIP.zip File.txt File_Changes.txt file*
Enter password: 
Verify password: 
        zip warning: name not matched: file*
updating: File.txt (deflated 16%)
updating: File_Changes.txt (deflated 35%)

$ zip -e -j ZIP.zip File.txt File_Changes.txt file*
Enter password: 
Verify password: 
updating: File.txt (deflated 16%)
updating: File_Changes.txt (deflated 35%)
  adding: file1.txt (deflated 24%)
  adding: file2.txt (deflated 24%)
  adding: file3.txt (deflated 24%)

如何使脚本能够正常运行。我需要做出哪些更改才能进行此更改?

1 个答案:

答案 0 :(得分:1)

如果使用shell输入命令,shell本身会将file*扩展为与此模式匹配的所有文件的列表。

运行期望的Tcl不知道您的给定文本是否是要扩展的模式。如果您希望tcl扩展您的模式,请使用tcl glob命令。

set files [ glob file*]
puts $files