
В статье будет рассмотрен скрипт для загрузки файлов на ftp и способ его использования в контекстном меню файлового менеджера Nautilus. Но скрипт не привязан именно к Gnome. Его можно использовать и с Thunar, и в KDE3/4, и из консоли.
Итак, необходимо убедиться, что в системе установлены следующие пакеты:
libnotify-bin nautilus-actions zenity
Открываем текстовый редактор, вставляем в него код ниже, сохранить куда вам удобно и делаем файл исполняемым.

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

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

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

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

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

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

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

Ну вот и всё. Всё просто. Большое спасибо Роману Коноплёву за саму идею и написание скрипта!
Теперь скрипты. Их два варианта.
Первый:
#!/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'ом. Он нагляднее, короче и все файлы заливаются за одно соединение с сервером.
<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[@]}"
Комментарии (1)
Сначала как-то не обратил внимание, когда скрипты публиковал, а сейчас заметил, что в скриптах нет обработки изображений.
На ноуте у меня проверяется тип файла. Если это изображение, тогда проверяется ширина оного. Если ширина превышает некое значение, тогда делается миниатюра и кладётся в uploads/mini, а оригинальное большое изображение кидается в uploads/
Итоговые ссылки формираются соответствующим образом, то есть:
...
Сначала как-то не обратил внимание, когда скрипты публиковал, а сейчас заметил, что в скриптах нет обработки изображений.
На ноуте у меня проверяется тип файла. Если это изображение, тогда проверяется ширина оного. Если ширина превышает некое значение, тогда делается миниатюра и кладётся в uploads/mini, а оригинальное большое изображение кидается в uploads/
Итоговые ссылки формираются соответствующим образом, то есть:
...