Linux -- это интересно

Загрузка файлов на ftp из меню Nautilus


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

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

libnotify-bin nautilus-actions zenity

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

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

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

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

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

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

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

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

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

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

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

Первый:

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

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

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

Сначала как-то не обратил внимание, когда скрипты публиковал, а сейчас заметил, что в скриптах нет обработки изображений.

На ноуте у меня проверяется тип файла. Если это изображение, тогда проверяется ширина оного. Если ширина превышает некое значение, тогда делается миниатюра и кладётся в uploads/mini, а оригинальное большое изображение кидается в uploads/

Итоговые ссылки формираются соответствующим образом, то есть:

<a href="uloads/mini/001.jpg"><img></a>
<a href="uloads/mini/002.jpg"><img></a>
<a href="uloads/mini/003.jpg"><img></a>

...

Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)