Утягиваем фотографии по bluetooth

    На хабре регулярно публикуют разнообразные bash-скрипты, попроще и посложнее — внесу и я свою лепту.
    Так сложилось, что я делаю много фотографий телефоном — по этой причине захотелось иметь способ автоматически сливать их на комп. Данный скрипт запрашивает список файлов на телефоне, сверяет его с локальным списком и загружет недостающие файлы. Он опирается на утилиту obexftp, доступную в большинстве дистрибутивов. У меня он висит в cron'e на 6 утра — довольно удобно. Вообще с его помощью можно получать не только фотографии — в целом, это простенькая утилита синхронизации данных.
    Замечания по использованию и сам скрипт под хабракатом.

    Для того, чтобы пользоваться этим скриптом вам достаточно выставить корректные значения этих переменных:
    DEVICE — bluetooth-адрес вашего устройства, можно узнать при помощи команды «hcitool scan».
    REMOTE_DIR, LOCAL_DIR — удаленные и локальные папки с данными.
    TMP_DIR — временная папка
    VERBOSE — «говорливость» по-умолчанию, «yes» или «no». также управляется ключем "-v"
    FILE_FORMAT — регулярное выражение (sed) на имена файлов. для того чтобы получать все файлы: [^\"]*

    Собственно скрипт:

    Copy Source | Copy HTML
    1. #!/bin/bash
    2.  
    3. DEVICE="00:1A:75:C5:28:FB"
    4. REMOTE_DIR="/Memory Stick/DCIM/100MSDCF"
    5. LOCAL_DIR="$HOME/mobile_phone/photo/"
    6. TMP_DIR="/tmp"
    7. VERBOSE="no"
    8. FILE_FORMAT="DSC.....\.JPG"
    9.  
    10. if [ "$1" == "-v" ]; then
    11.         VERBOSE="yes"
    12. fi
    13.  
    14. tmplist="$TMP_DIR/getphoto_$PPID"
    15.  
    16. obexftp -b "$DEVICE" -l "$REMOTE_DIR" > "$tmplist" 2>/dev/null
    17.  
    18. if [ ! "$?" ]; then
    19.         rm -f -- "$tmplist"
    20.         echo "No mobile phone found. Please check the bluetooth connection."
    21.         exit 1
    22. fi
    23.  
    24. cd "$LOCAL_DIR"
    25.  
    26. return_code=0
    27.  
    28. grep '<file' -- "$tmplist" |
    29.         sed -e 's/<file name=\"\('$FILE_FORMAT'\)\".*/\1/' | while read filename
    30.         do
    31.                 if ! test -a "$filename" ; then
    32.                         obexftp -b "$DEVICE" -g "$REMOTE_DIR/$filename" 1>/dev/null 2>/dev/null
    33.                         if [ ! "$?" ]; then
    34.                                 echo "Error downloading file: '$filename'"
    35.                                 return_code=2
    36.                         else
    37.                                 if [ "$VERBOSE" == "yes" ]; then
    38.                                         echo "File '$filename' downloaded successfully"
    39.                                 fi
    40.                         fi
    41.                 fi
    42.         done
    43.  
    44. rm -- "$tmplist"
    45.  
    46. exit "$return_code"

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 16

      0
      а чего это ты везде используешь [] а для -a "$filename" — test?
        0
        когда я читал этот скрипт (написанный довольно давно) — я тоже об этом подумал, но решил не исправлять :)
          +4
          как говориться, если то-то работает — лучше не трогать =)
        +1
        а нельзя ли просто подмонтировать телефон с помощью obexfs и запустить какую-нибудь стандартную утилиту для синхронизации?
          +2
          можно :) но когда я об этом подумал, скрипт уже был написан :)
            0
            не все монтируются через obexfs, мой 6630 например нет
              0
              Странно, мой 6630 монтируется.
              $ cat bin/mount.6630 
              #!/bin/bash
              set -x
              if [ -z "$1" ]; then
              	echo "Usage: $0 <mountpoint>"
              	exit 1
              fi
              exec obexfs -b 00:17:4B:xx:yy:zz -B 12 "$1"
              
                0
                Фишка в том, что не всегда obexfs правильно определяет, какой канал надо использовать. Это как-то можно сделать автоматически, но я, увы, забыл, как.
              0
              Вначале посмтрел на заголовок, подумал хак какой-то… Жаль
                0
                Спасибо за скрипт! Вроде работает пока
                  0
                  имхо скрипт велосипед, когда часто сливаются на комп новые фотки очень удобно пользоваться фото-менеджером типа F-spot, которые справляются с этой задачей на ура плюс и имеют еще массу других полезных функций. единственный плюс в данном решении это автоматизация процесса, поэтому я бы лично туда прикрутил вместо самопальной синхронизации как раз f-spot и получилось бы довольно красивое решение
                    0
                    Люди, помогите запустить голубые зубы в мандриве 2009.0. Никак не хотят работать — при попытке передачи файла на 18% kdebluetooth4 вываливает ошиьку obex bad request.

                    У меня стоит kde4.1 и, как уже сказал, мандрива 2009.0. Я попытался обновить все — libopenobex, obex-data-server, bluez, libbluez, kdebluetooth и еще что-то кажется было. Теперь kdebluetooth запускается, но не появляется в трее. При попытке сделать «obexftp» получаю сообщение о неизвестной команде.

                    Куда копать, в какой последовательности?
                      0
                      Забыл, вот результат hciconfig -a
                      hci0: Type: USB
                      BD Address: 00:15:AF:FD:5F:E7 ACL MTU: 1021:8 SCO MTU: 64:1
                      UP RUNNING PSCAN
                      RX bytes:6511 acl:239 sco:0 events:163 errors:0
                      TX bytes:69943 acl:138 sco:0 commands:64 errors:0
                      Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x79 0x83
                      Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
                      Link policy: RSWITCH HOLD SNIFF PARK
                      Link mode: SLAVE ACCEPT
                      Name: 'localhost-0'
                      Class: 0x18010c
                      Service Classes: Capturing, Object Transfer
                      Device Class: Computer, Laptop
                      HCI Ver: 2.1 (0x4) HCI Rev: 0x50eb LMP Ver: 2.1 (0x4) LMP Subver: 0x420e
                      Manufacturer: Broadcom Corporation (15)

                      Версия блютусины — BT-253 кажется. Производитель Broadcom судя по всему. Ноут — ASUS F80L.
                        0
                        A obexftp-то собственно установлен? urpmi obexftp…
                      0
                      теперь такое бы для Макоса придумать
                        0
                        Максимально православно — примонтировать obexfs, а потом, не изобретая велосипедов использовать rsync

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое