slitaz-tools annotate boxes/scp-box @ rev 759
Add new scp-box
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Wed May 02 15:56:39 2012 +0200 (2012-05-02) |
parents | |
children | 75e873df3022 |
rev | line source |
---|---|
pankso@759 | 1 #!/bin/sh |
pankso@759 | 2 # |
pankso@759 | 3 # SCP Box - Small front end to the secure file copy utility. |
pankso@759 | 4 # |
pankso@759 | 5 # Copyright (C) 2008-2012 SliTaz GNU/Linux - BSD License |
pankso@759 | 6 # |
pankso@759 | 7 # Author: Christophe Lincoln <pankso@slitaz.org> |
pankso@759 | 8 # |
pankso@759 | 9 . /lib/libtaz.sh |
pankso@759 | 10 |
pankso@759 | 11 [ "$file" ] || file="$HOME" |
pankso@759 | 12 [ "$dir" ] || dir="$HOME" |
pankso@759 | 13 |
pankso@759 | 14 # Internal variables (we need a space before options). |
pankso@759 | 15 config=$HOME/.config/scpbox |
pankso@759 | 16 icon=/usr/share/pixmaps/slitaz-icon.png |
pankso@759 | 17 term="xterm -geometry 80x16" |
pankso@759 | 18 scpopts=" -r -P 22" |
pankso@759 | 19 |
pankso@759 | 20 # Make sure we have a config files. |
pankso@759 | 21 if [ ! -d "$config" ] || [ -f "$config/hosts" ]; then |
pankso@759 | 22 mkdir -p $config |
pankso@759 | 23 touch $config/hosts && chmod 0600 $config/hosts |
pankso@759 | 24 fi |
pankso@759 | 25 |
pankso@759 | 26 # |
pankso@759 | 27 # Functions |
pankso@759 | 28 # |
pankso@759 | 29 |
pankso@759 | 30 # Help and usage |
pankso@759 | 31 usage() { |
pankso@759 | 32 cat << EOT |
pankso@759 | 33 |
pankso@759 | 34 $(gettext "Usage:") $(basename $0) [command|option] |
pankso@759 | 35 |
pankso@759 | 36 $(gettext "Commands:") |
pankso@759 | 37 list-hosts $(gettext "List all know hosts") |
pankso@759 | 38 |
pankso@759 | 39 $(gettext "Options:") |
pankso@759 | 40 --file=/path/to/file |
pankso@759 | 41 --dir=/path/to/directory |
pankso@759 | 42 |
pankso@759 | 43 $(gettext "Examples:") |
pankso@759 | 44 $(basename $0) --file=/path/to/file |
pankso@759 | 45 |
pankso@759 | 46 EOT |
pankso@759 | 47 } |
pankso@759 | 48 |
pankso@759 | 49 # List last used hosts. |
pankso@759 | 50 list_hosts() { |
pankso@759 | 51 for h in $(cat $config/hosts) |
pankso@759 | 52 do |
pankso@759 | 53 echo -n "!$h" |
pankso@759 | 54 done |
pankso@759 | 55 } |
pankso@759 | 56 |
pankso@759 | 57 # Main GUI box function with pure Yad spec |
pankso@759 | 58 scpbox_main() { |
pankso@759 | 59 text=$(gettext "<b>Secure copy</b> - Copy files remotly with scp") |
pankso@759 | 60 yad --form --title="SCP Box" --window-icon=$icon \ |
pankso@759 | 61 --image=folder-remote --image-on-top \ |
pankso@759 | 62 --height=320 --width=500 --text="$text" \ |
pankso@759 | 63 --field="$(gettext "User name:")" \ |
pankso@759 | 64 --field="$(gettext "Hostname:")" \ |
pankso@759 | 65 --field="$(gettext "Know hosts:")":CB \ |
pankso@759 | 66 --field="$(gettext "Options:")" \ |
pankso@759 | 67 --field="$(gettext "Local file:")":FL \ |
pankso@759 | 68 --field="$(gettext "Local directory:")":DIR \ |
pankso@759 | 69 --field="$(gettext "Remote path:")" \ |
pankso@759 | 70 --button="$(gettext "Download")":2 \ |
pankso@759 | 71 --button="$(gettext "Upload")":0 \ |
pankso@759 | 72 --button="gtk-close":1 \ |
pankso@759 | 73 "$USER" "" "$(list_hosts)" "$scpopts" "$file" "$dir" "" |
pankso@759 | 74 } |
pankso@759 | 75 |
pankso@759 | 76 # Main function |
pankso@759 | 77 scpbox() { |
pankso@759 | 78 # Store box results |
pankso@759 | 79 main=$(scpbox_main) |
pankso@759 | 80 ret=$? |
pankso@759 | 81 [ "$debug" ] && echo "DEBUG: main=$main" |
pankso@759 | 82 |
pankso@759 | 83 user=$(echo $main | cut -d "|" -f 1) |
pankso@759 | 84 hostname=$(echo $main | cut -d "|" -f 2) |
pankso@759 | 85 options=$(echo $main | cut -d "|" -f 4) |
pankso@759 | 86 remote=$(echo $main | cut -d "|" -f 7) |
pankso@759 | 87 |
pankso@759 | 88 # Use and store new hostname. |
pankso@759 | 89 if [ "$hostname" ]; then |
pankso@759 | 90 echo "$hostname" >> $config/hosts |
pankso@759 | 91 host="$hostname" |
pankso@759 | 92 else |
pankso@759 | 93 host=$(echo $main | cut -d "|" -f 3) |
pankso@759 | 94 fi |
pankso@759 | 95 if [ "$host" == "(null)" ] || [ ! "$host" ]; then |
pankso@759 | 96 echo "No host: exit" && exit 0 |
pankso@759 | 97 fi |
pankso@759 | 98 |
pankso@759 | 99 # Deal with --button values |
pankso@759 | 100 case $ret in |
pankso@759 | 101 0) |
pankso@759 | 102 # Upload: do we have a single file or a directory (skip $HOME) |
pankso@759 | 103 file=$(echo $main | cut -d "|" -f 5) |
pankso@759 | 104 dir=$(echo $main | cut -d "|" -f 6) |
pankso@759 | 105 if [ -f "$file" ]; then |
pankso@759 | 106 local="$file" |
pankso@759 | 107 elif [ "$dir" != "$HOME" ]; then |
pankso@759 | 108 local="$dir" |
pankso@759 | 109 else |
pankso@759 | 110 echo "No file: exit" && exit 0 |
pankso@759 | 111 fi |
pankso@759 | 112 cmd="scp $options $local $user@$host:$remote" |
pankso@759 | 113 [ "$debug" ] && echo "DEBUG: $cmd" |
pankso@759 | 114 $term -e "$cmd" ;; |
pankso@759 | 115 2) |
pankso@759 | 116 # Download: we need a remote a file. |
pankso@759 | 117 local=$(echo $main | cut -d "|" -f 6) |
pankso@759 | 118 if [ ! "$remote" ]; then |
pankso@759 | 119 echo "No remote file: exit" && exit 0 |
pankso@759 | 120 fi |
pankso@759 | 121 cmd="scp $options $user@$host:$remote $local" |
pankso@759 | 122 [ "$debug" ] && echo "DEBUG: $cmd" |
pankso@759 | 123 $term -e "$cmd" ;; |
pankso@759 | 124 *) |
pankso@759 | 125 exit 0 ;; |
pankso@759 | 126 esac |
pankso@759 | 127 } |
pankso@759 | 128 |
pankso@759 | 129 # |
pankso@759 | 130 # Commands |
pankso@759 | 131 # |
pankso@759 | 132 |
pankso@759 | 133 case "$1" in |
pankso@759 | 134 list-hosts) |
pankso@759 | 135 list_hosts ;; |
pankso@759 | 136 ""|--*) |
pankso@759 | 137 scpbox ;; |
pankso@759 | 138 *) |
pankso@759 | 139 usage ;; |
pankso@759 | 140 esac |
pankso@759 | 141 |
pankso@759 | 142 exit 0 |