Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

Помощник для DropBox

27.01.2010 23:26

Начав пользоваться сервисом синхронизации данных DropBox, я понял, что процесс можно сделать более удобным с помощью небольшого усовершенствования.

 
Dropbox — это сервис синхронизации данных, включающий контроль версий, возможность публикации файлов и совместной работы над файлами. Вкратце опишу принцип работы dropbox (за подробностями лучше всего обратиться к официальному сайту http://dropbox.com — правда, если вы не пользуетесь DropBox, то вам эта статья не пригодится): клиент отслеживает изменения содержимого заданного каталога и при необходимости синхронизирует с сервером и другими компьютерами его содержимое. Т.е. для синхронизации нужно просто что-то скопировать в указанный каталог, обычно это ~/Dropbox. В принципе, это довольно удобно, но мне показалось, что этого мало. Я захотел, чтобы файлы отправлялись на синхронизацию прямо из контекстного меню. И заодно так, чтобы можно было выбрать подкаталог в синхронизируемой директории (например, там есть по умолчанию photos и public для публикации соответствующих файлов). Для этого я написал небольшой скрипт на bash. Для работы ему понадобится пакет gtkdialog, а чтобы добавить пункт меню в nautilus — nautilus-actions.

 

 #! /bin/bash
 
 # ################################### Настройки ###################################
 
 # Path to your Dropbox directory
 dropboxfolder="$HOME/Общедоступная/Dropbox";
 
 # #################################### Скрипт #####################################
 
 IFS='
 '
 
 for d in "$@"; do
 files+="\"$d\" "
 done
 SelectedFiles=$(for d in "$@"; do echo "$d" |  sed "s/^.*$/<item>\"&\"<\/item>/g"; done );
 Items=$(find $dropboxfolder -type d |  sed "s/^.*$/<item>\"&\"<\/item>/g" | tr \\n \\0  );
 
 export MAIN_DIALOG="
 <window title=\"Синхронизация файлов с помощью DropBox\" icon-name=\"gtk-dialog-question\">
 <vbox>
 <text>
     <label>Выбраны следующие файлы и каталоги:</label>
 </text>
 <table>
 <height>111</height><width>555</width>
 <variable>TABLE</variable>
 $SelectedFiles
 </table>
 <text>
     <label>Выберите каталог для копирования выбранных файлов</label>
 </text>
 <table>
 <height>333</height><width>555</width>
 <variable>TABLE</variable>
 <label>Возможные варианты:</label>
 $Items
 </table>
 <hbox>
 <button ok>
 <action>for f in $files ; do cp \"\$f\" \"\$TABLE\" -R; done & </action>
 <action>Exit:0</action>
 </button>
 <button cancel></button>
 </hbox>
 </vbox>
 </window>
 "
 
 gtkdialog -c --program MAIN_DIALOG
 
 exit;
 

 

В скрипте надо указать только одну переменную — путь к каталогу Dropbox. После чего я лично положил его в ~/bin и сделал исполняемым.
Дальше всё просто: нужно добавить действие в контекстное меню файлового менеджера nautilus (можно, конечно, сделать это и с другими файловыми менеджерами). Создайте новое действие и настройте его параметры.

 

настройка действий в Nautilus 1
настройка действий в Nautilus 2
настройка действий в Nautilus 2

 

После этого в контекстном меню Nautilus появится пункт «Положить в Dropbox»:

 

Пункт контекстного меню

 

А при его вызове появится окно с перечислением выбранных файлов и/или каталогов, предлагающее выбрать целевой каталог внутри каталога Dropbox.

 

Внешний вид диалогового окна

 

После нажатия ОК файлы будут скопированы, а затем и постепенно — насколько позволит соединение с Интернетом и настройки DropBox — будут синхронизированы.
Ссылки на публичные файлы, каталоги и галереи, впрочем, всё равно придётся отдельно получать с помощью контекстного меню.
[an error occurred while processing this directive]