bin bash Функции файлового менеджера fmgr while true do curdir pwd fil

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash
#Функции файлового менеджера
fmgr () {
while true
do
curdir=`pwd`
file=`ls -ap1 | zenity --list \
--height="500" \
--title="«Файловый менеджер»" \
--text="При выборе каталога - просмотр его содержимого.
При выборе файла возможно его переименование
или удаление с запросом.
Кнопка «Отменить» закрывает файловый менеджер.
" \
--column=$curdir`
[ -z "$file" ] && break
[ -d "$file" ] && cd "$file" || {
op=`zenity --list --radiolist \
--title="Выбран файл $file" \
--text="Выберите действие с файлом $file и нажмите ОК.
Кнопка «Отменить» возвращает в текущий каталог." \
--column=" " --column="Действие" \
TRUE "Переименовать" FALSE "Удалить"`
[ -z "$op" ] && continue
if [ $op == "Переименовать" ]
then {
new_name=`zenity --entry --title="Переименование файла $file" --text="Новое имя файла:"`
[ -z "$new_name" ] && {
zenity --warning --title="Переименование файла $file" --text="Переименование отменено"
} || {
mv -i "$file" "$new_name"
zenity --info --title="Переименование файла $file" --text="Переименование завершено\nНовое имя $new_name"
}
}
elif [ $op == "Удалить" ]
then {
zenity --question --title="Удаление файла" --text="Вы дейcтвительно хотите удалить файл $file"
[ $? -eq "0" ] && {
rm -f "$file"
zenity --info --title="Удаление файла $file" --text="Удаление файла завершено!"
} || {
zenity --info --title="Удаление файла $file" --text="Удаление отменено"
}
}
fi
}
done
}
#Функции FTP-клиента
ftpcmd () { #выполнение команды ftp (по-умолчанию "ls -a")
[ -n "$1" ] && cmd="$1" || cmd="ls -a"
echo "open $HOST" > $TMPF; echo "user $USER $PASS" >> $TMPF
echo "" >> $TMPF; echo "binary" >> $TMPF
echo "cd $curdir" >> $TMPF; echo $cmd >> $TMPF
echo "exit" >> $TMPF
ftp -in < "$TMPF"; rm $TMPF
}
upd_curdir () { #получение корректного пути к текущему каталогу
echo "open $HOST" > $TMPF; echo "user $USER $PASS" >> $TMPF
echo "" >> $TMPF; echo "binary" >> $TMPF
echo "cd $curdir" >> $TMPF; echo "pwd" >> $TMPF
echo "exit" >> $TMPF
curdir=`ftp -in < "$TMPF" | grep -o "/[^\"]*"`
rm $TMPF
}
brouse_ftp () { #просмотр списка файлов FTP-сервера и скачивание выбранного файла
while true
do
result=`ftpcmd | awk '{if (substr($1,1,1)=="d") {print "Каталог\n" $9} else {print "-\n" $9}}' | zenity --list \
--height="500" --width="230" \
--title="«FTP-клиент»" --text="Выберите каталог" \
--column="Тип" --column="$curdir" \
--print-column="ALL" --separator="\t"`
file=`echo $result | awk '{print $2}'`; type=`echo $result | awk '{print $1}'`
[ -z $file ] && break
[ "$curdir" == "/" -a "$file" == ".." ] && continue
[ "$type" == "Каталог" ] && {
curdir="$curdir/$file"; upd_curdir
} || {
zenity --question --title="Выбран файл $file" --text="Хотите cкачать его с сервера?"
[ $? -eq "0" ] && {
localdir=`zenity --file-selection --title="Сохранение файла" --filename="$file" --save`
[ -z $localdir ] && zenity --warning --title="Сохранение файла" --text="Сохранение отменено.\nНе введено имя файла" || {
result=`ftpcmd "get $file $localdir"`
[ -z $result ] && zenity --info --title="Сохранение файла" --text="Файл $file успешно скопирован в $localdir" || zenity --error --title="Сохранение файла" --text="Не удалось сохранить файл,\nпроверьте права на каталог и\nпопробуйте еще раз."
}
}
}
done
}
upload_ftp () {
localdir="`zenity --file-selection --title="Загрузка файла"`"
[ -z $localdir ] && zenity --warning --title="Загрузка файла" --text="Загрузка отменена.\nНе введено имя файла" || {
remfile=`basename $localdir`
result=`ftpcmd "put $localdir /uploads/$remfile"`
[ -z $result ] && zenity --info --title="Загрузка файла" --text="Файл $file успешно загружен в /uploads/$remfile" || zenity --error --title="Сохранение файла" --text="Не удалось сохранить файл,\nпроверьте права на каталог и\nпопробуйте еще раз."
}
}
ftpmgr () {
HOST=`zenity --entry --title="Подключение к FTP" --text="Введите ip или имя сервера:" --entry-text="127.0.0.1"`
[ -z "$HOST" ] && return 1
USER=`zenity --entry --title="Подключение к FTP" --text="Введите логин:" --entry-text="ftp"`
[ -z "$USER" ] && return 1
PASS=`zenity --entry --title="Подключение к FTP" --text="Введите пароль:\nДля пользователя «ftp» - любые символы" --entry-text="123"`
[ -z "$PASS" ] && return 1
TMPF="$$.ftp"; curdir="/"
while true
do
des=`zenity --list\
--title="FTP-клиент" \
--text="Как вы хотите использовать FTP-клиент" \
--column="№" --column="Действие" \
--width="400" --height="180" \
"1" "Просмотр списка файлов и скачивание" "2" "Загрузка файлов на сервер"`
case $des in
1) brouse_ftp ;;
2) upload_ftp ;;
*) break ;;
esac
done
}
#Тело программы
until false
do
#clear
echo -e "Что запустим? :)
--------------------------------------
\E[1;34m 1.\E[0m «Файловый менеджер»
\E[1;34m 2.\E[0m «FTP-клиент»
\E[1;31m 3.\E[0m ВЫХОД
--------------------------------------"
[ -n "$msg" ] && echo -e $msg
echo -n "Ваш выбор: "; read n
msg=""
case $n in
1) fmgr ;;
2) ftpmgr && echo "ftpmgr отработал" || msg="\E[1;37;45m FTP-подключение прервано! \E[0m" ;;
3) exit ;;
*)msg="\E[1;37;41m Неверно указан номер операции. Попробуйте еще раз. \E[0m" ;;
esac
done