Pull to refresh

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

Reading time 3 min
Views 940
На хабре регулярно публикуют разнообразные 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"

Tags:
Hubs:
+29
Comments 16
Comments Comments 16

Articles