#!/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