В статье будет рассмотрен скрипт для загрузки файлов на 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
1vovans16-02-2010 14:14
Сначала как-то не обратил внимание, когда скрипты публиковал, а сейчас заметил, что в скриптах нет обработки изображений.
На ноуте у меня проверяется тип файла. Если это изображение, тогда проверяется ширина оного. Если ширина превышает некое значение, тогда делается миниатюра и кладётся в uploads/mini, а оригинальное большое изображение кидается в uploads/
Итоговые ссылки формираются соответствующим образом, то есть:
...