121 lines
3.0 KiB
Plaintext
Executable File
121 lines
3.0 KiB
Plaintext
Executable File
#!/usr/bin/expect -f
|
|
|
|
#This script interative with the remote server, and send the file to it
|
|
|
|
set remoteip [ exec cat accout | grep RemoteServerIP | awk -F= "{print \$2}" ]
|
|
set username [ exec cat accout | grep LoginUserName | awk -F= "{print \$2}" ]
|
|
set userpass [ exec cat accout | grep LoginPassword | awk -F= "{print \$2}" ]
|
|
|
|
set mode [lindex $argv 0]
|
|
if { $mode == "getdir" } {
|
|
set remote_dir [lindex $argv 1]
|
|
} else {
|
|
if { $mode == "putdir" } {
|
|
set local_dir [lindex $argv 1]
|
|
set remote_dir [lindex $argv 2]
|
|
} else {
|
|
puts "Usage: ./sftpd getdir remotedir"
|
|
puts " ./sftpd putdir localdir remotedir"
|
|
puts " ./sftpd getfile remotefile"
|
|
puts " ./sftpd putfile localfile remotefile"
|
|
exit
|
|
}
|
|
}
|
|
|
|
|
|
set work_dir [ exec pwd ]
|
|
set remote_base_dir [ exec basename $remote_dir ]
|
|
|
|
proc get_directory {dir} {
|
|
# get current local dir
|
|
send "lpwd\n"
|
|
expect "*sftp>*"
|
|
set current_local_dir_str $expect_out(buffer)
|
|
set current_local_dir [ exec echo $current_local_dir_str | grep "directory" | awk -F: "{print \$2}" | cut -c2- ]
|
|
|
|
# get current remote dir
|
|
send "pwd\n"
|
|
expect "*sftp>*"
|
|
set current_remote_dir_str $expect_out(buffer)
|
|
set current_remote_dir [ exec echo $current_remote_dir_str | grep "directory" | awk -F: "{print \$2}" | cut -c2- ]
|
|
|
|
# get remote base dir
|
|
set current_remote_base_dir [ exec basename $dir ]
|
|
|
|
# check the dir whether exist
|
|
#set result [ exec ls -l | grep -c "$current_remote_base_dir\$" ]
|
|
#if { $result == 1 } {
|
|
# send_user "file:$current_remote_base_dir already exist"
|
|
# exit
|
|
#}
|
|
|
|
# create the local dir
|
|
send "lmkdir $current_remote_base_dir\n"
|
|
expect "*sftp>*"
|
|
|
|
# cd remote dir
|
|
send "cd $dir\n"
|
|
expect "*sftp>*"
|
|
|
|
# cd local dir
|
|
send "lcd $current_remote_base_dir\n"
|
|
expect "*sftp>*"
|
|
|
|
|
|
# list the file in the current remote dir
|
|
send "ls -l\n"
|
|
expect "*sftp>*"
|
|
set fileliststr $expect_out(buffer)
|
|
|
|
# get remote files
|
|
set runcmd [list exec echo $fileliststr | grep "^\[-d\]" | grep "^\[^d\]" | awk "{print \$9}"]
|
|
if {[catch $runcmd res]} {
|
|
send_user "skip"
|
|
} else {
|
|
set filelist [ exec echo $fileliststr | grep "^\[-d\]" | grep "^\[^d\]" | awk "{print \$9}" ]
|
|
foreach file $filelist {
|
|
send "get $file\n"
|
|
expect "*sftp>*"
|
|
}
|
|
}
|
|
|
|
# process dir
|
|
set runcmd [list exec echo $fileliststr | grep "^d" | awk "{print \$9}"]
|
|
if {[catch $runcmd res]} {
|
|
send_user "skip"
|
|
} else {
|
|
set dirlist [ exec echo $fileliststr | grep "^d" | awk "{print \$9}" ]
|
|
foreach directory $dirlist {
|
|
set new_remote_dir [ exec echo $dir/$directory ]
|
|
get_directory $new_remote_dir
|
|
}
|
|
}
|
|
|
|
send "lcd ..\n"
|
|
expect "*sftp>*"
|
|
|
|
send "cd $current_remote_dir\n"
|
|
expect "*sftp>*"
|
|
}
|
|
|
|
set timeout 120
|
|
|
|
spawn sftp $username@$remoteip
|
|
|
|
|
|
expect "*(yes/no)?" {send "yes\n"; expect "*assword: "} "*assword: "
|
|
send "$userpass\n"
|
|
expect "*sftp>*"
|
|
if { $mode == "getdir" } {
|
|
get_directory $remote_dir
|
|
} else {
|
|
send "$local_dir $remote_dir\n"
|
|
|
|
expect "*sftp>*"
|
|
}
|
|
#set value $expect_out(buffer)
|
|
#send "$value\n"
|
|
#expect "*sftp>*"
|
|
exit
|
|
|