Была у меня цель – заливать файлы на ftp с помощью одной только консоли.
Например так: upload test.txt — на выходе получаем ссылку на скачивание
С таким скриптом устраняется зависимость от любых сервисов типа sendspace, которые к тому же периодически мониторят всякие “хакеры”, ища что-нибудь интересное.
Наконец, я его реализовал.
Нам понадобится:
1. примонтировать ftp папку к нашей системе
2. написать bash-скрипт для загрузки файла
Приступим.
Первым делом, чтобы монтировать ftp-директории к нашей локальной системе, необходимо установить curlftpfs:
1 | sudo yum install curlftpfs |
Далее, открываем /etc/fstab, в котором хранятся все правила монтирования в нашей системе:
1 | sudo vim /etc/fstab |
Добавляем в него строчку:
1 | curlftpfs#USER:PASSWORD@SERVER /MY_DIR fuse rw,uid=1000,umask=0777,user,suid,allow_other,exec,auto,utf8 0 1 |
тут все просто – указывает юзера, пароль, имя/ip сервера и на месте /MY_DIR – свою локальную папку, в которую хотим примонтировать.
Говорим mount заново прочитать fstab:
1 | sudo mount -a |
Готово.
Теперь, чтобы залить файл на ftp – достаточно скопировать его в /MY_DIR
но это всё же слишком долго, а мы ленивые, к тому же MC ощутимо тормозит, если в одной из его вкладок открыта ftp-директория. Поэтому напишем bash-скрипт, который будет не только заливать файл за нас, но ещё и делать много других полезных сопутствующих действий.
Создадим его в родной папке bin. После этого можно сделать ссылку на него в /usr/bin, можно добавить родной bin в список путей, которые сканируются башем при вызове команды – чтобы вызывать его командой upl.sh и не писать полный путь. Но это сделать несложно, поэтому пусть это будет вашим домашним заданием.
1 | vim ~/bin/upl.sh |
Запуск скрипта осуществляется с передачей имен файлов в качестве аргументов:
1 | upl.sh my.zip test.txt video.avi |
А из mc ещё проще – можно выделить нужные файлы с помощью Insert и набрать:
1 | upl.sh %t |
Директория для загрузки файлов на фтп – /local_ftp_dir/server.ru/uploads/
Дальнейшие комментарии будут в самом коде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #!/bin/bash # created 25/01/2011 # если кол-во входных параметров = 0 if [ $# -eq 0 ] then # пишем что это нехорошо и завершаем скрипт echo 'UPL - script to upload files on freedomscripts server. use only with arguments!' exit 0 fi # перебираем все полученные аргументы for file in $@ do # текущая дата в формате день.месяц.ГОД - для уникальной папки на ftp date=$(date +%d.%m.%y) newUploadDir = /local_ftp_dir/server.ru/uploads/$date # если директория для текущей даты уже существует - не делать ничего if [ -d newUploadDir ]; then #nothing echo "dir $date is exists" # если же её нет - сегодня ничего не заливали - создаем папку else mkdir newUploadDir fi # копируем в неё файл и получаем ссылку на его скачивание cp $file newUploadDir echo "done! https://www.server.ru/uploads/$date/$file" # дозаписываем отчет о загрузке в файлик uploads.txt echo "$(date +%R) https://www.server.ru/uploads/$date/$file" >> /home/user/bin/uploads.txt # удаляем файл rm $file done |