upload to ftp 01
В статье будет рассмотрен скрипт для загрузки файлов на ftp и способ его использования в контекстном меню файлового менеджера Nautilus. Но скрипт не привязан именно к Gnome. Его можно использовать и с Thunar, и в KDE3/4, и из консоли.

Итак, необходимо убедиться, что в системе установлены следующие пакеты:

libnotify-bin nautilus-actions zenity


Открываем текстовый редактор, вставляем в него код ниже, сохранить куда вам удобно и делаем файл исполняемым.

upload to ftp 08

Далее открываем Система > Параметры > Настройка действий в Nautilus:

upload to ftp 04
В появившемся окне создаём новый пункт меню и называем, как нам хочется. При желании можно указать иконку для данного события.

upload to ftp 05

Переходим во вкладку "Command/Команды", находи там свой файл в графе "Path/Путь" и прописываем параметры "%d/%M".

upload to ftp 06

Во вкладке "Conditions/Условия" делаем всё, как на снимке ниже:

upload to ftp 07
Главное не забыть разрешить применять данное действие и для группы файлов (последняя галочка).

Всё, после сохранения и выхода из приложения в контекстном меню появится новый пункт. Теперь выделяем один или группу файлов, кликаем по ним правой клавишей мыши и выбираем что нужно:

upload to ftp 01
и наблюдаем как файлы полились на ftp.

upload to ftp 02
После завершения операции появится итоговое окно с загруженными файлами, откуда можно по мере необходимости копировать ссылки.
upload to ftp 03

Ну вот и всё. Всё просто. Большое спасибо Роману Коноплёву за саму идею и написание скрипта!

Теперь скрипты. Их два варианта.

Первый:

#!/bin/bash<br># FTP Uploader<br># Написал korodm, vovans, tit (mail: korodm@ya.ru)<br># Использовать так: putftp [-g] file [file2 ...]<br># Опция -g выводит сслыки на загруженные файлы во всплывающем окне, а если функцию не использовать, то вывод будет в консоль<br><br># вставьте свои данные<br>FTP="***" # адрес фтп<br>USER="***" # логин<br>PASS="***" # пароль<br>MODE=1 # режим вывода ссылок (0 - в консоли, 1 - в окне)<br><br># проверка опций<br>while getopts g option<br>do<br>case $option in<br>g) MODE=1;;<br># можно вставить еще опции<br>esac<br>done<br>shift $((OPTIND - 1))<br><br>OLD_DIR=`pwd` # текущая папка<br><br>N_URL=0 # номер ссылки (нужен для массива ссылок)<br><br># цикл необходим для загрузки нескольких файлов<br>for FILE in `echo $*`<br>do<br>NEW_DIR=`dirname $FILE` # папка, в которой лежит файл<br>FILE_NAME=`echo $FILE | awk -F$NEW_DIR"/" '{ print $2 }'` # вырезаем имя файла<br><br># если файл в том же каталоге, что и скрипт, то предыдущие 2 команды не сработают, поэтому вручную даем имя файлу<br>if [[ $NEW_DIR = "." ]]<br>then FILE_NAME=$FILE<br>fi<br><br>cd $NEW_DIR<br><br># подключаемся к фтп, создаем каталог и заливаем файл<br>ftp -n $FTP <<br>quote USER $USER<br>quote PASS $PASS<br>cd upload<br>put $FILE_NAME<br>quit<br>END<br><br>if test $MODE == "1"<br>then<br>notify-send "`du -hs $FILE_NAME | awk '{print $2 $1}'`" 2> /dev/null<br>else<br>du -hs $FILE_NAME | awk '{print $2 $1}'` 2> /dev/null<br>fi<br><br>cd $OLD_DIR<br><br># создание сслылок для файлов<br>URL[$N_URL]="ftp://"$FTP"/upload/"$FILE_NAME<br>let N_URL++<br>done<br><br># вывод ссылок в зависимости от режима вывода<br>if test $MODE == "1"<br>then<br>notify-send --icon putftp "Загрузка завершена" 2> /dev/null<br>zenity --list --title "Загруженные файлы" --text "Список загруженных файлов" --editable --column "URLs" ${URL[*]} 2> /dev/null<br>else<br>for OUT in ${URL[*]}<br>do<br>echo $OUT<br>done<br>fi



Второй был чуть позже переписан TIT'ом. Он нагляднее, короче и все файлы заливаются за одно соединение с сервером.

upload to ftp 09

<br>#!/bin/bash<br><br>declare "-r" FTP_URL="zenway.ru"<br>declare "-r" USERNAME="zenway"<br>declare "-r" PASSWORD="JhEer.78Iue"<br># Директория, которая будет создаваться на сервере для заливки файлов. В примере будет создаваться директория с именем МЕСЯЦ_ГОД<br>declare "-r" DATE=`date '+%m_%Y'`<br># Директория, в которую будут заливаться файлы<br>declare "-r" UPLOAD_DIR="zenway/uploads/"$DATE<br><br>declare "-r" ERROR="/dev/null"<br>declare "-a" OUT_URLS<br>declare "-a" FTP_COMMANDS<br>declare COUNT<br><br>for COUNT in $*<br>do<br>        FTP_COMMANDS=( ${FTP_COMMANDS[@]}"lcd `dirname "$COUNT"`\nput `basename "$COUNT" 2>> "$ERROR"`\n" )<br>        OUT_URLS=( ${OUT_URLS[@]}"http://"$FTP_URL"/"$UPLOAD_DIR"/`basename "$COUNT" 2>> "$ERROR"` " " `du -hs basename "$COUNT" | awk '{print $1}' ` " )<br>        NOTIFY=( ${NOTIFY[@]}"notify-send "basename $COUNT"\n")<br>done<br><br>`ftp "-n" "$FTP_URL" <<br>user "$USERNAME" "$PASSWORD"<br>prompt<br>image<br>cd "$UPLOAD_DIR"<br>\`echo "-e" "${FTP_COMMANDS[@]}" 2>> "$ERROR"\`<br>bye<br>EOF` >> "$ERROR" 2>> "$ERROR"<br><br># Вывод результата через GUI<br>zenity --list --title "Загруженные файлы" --text "Список загруженных файлов" --editable --column "URLs" --column "Size" "${OUT_URLS[@]}"<br><br># Вывод в консоль<br># echo "-e" "${OUT_URLS[@]}"