#!/bin/zsh # This script syncs an Android with a Mac using adb and adb-sync. # Version 13.0 (13 October 2021) # Replaced adb-sync with timepigeon/adb-sync and delete thumbnails folder before pull # Export paths for use if the script is turned into an app using Platypus. export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/$" # Sets the local paths export LOG=~/Library/Logs/mobisync.log export DOWNLOADS=~/Downloads/ # Set error variable ERROR=0 echo "NOTIFICATION: Sync is starting..." # Send a notification (with logo) # Function: Reviews the last command for errors. Then prints update complete to log or shows error dialog. Takes section variable. catcher () { if [ "$?" = "0" ]; then printf "$1 synced." >> $LOG # If no error, print sync complete to file. echo "" >> $LOG # Add a line to file. else # If error, show a dialog stating the section where the error occured. echo "NOTIFICATION: '$1' sync failed." printf "$1 failed to sync." >> $LOG # If error, print sync failed to file. echo "" >> $LOG # Add a line to file. ERROR=1 # Sets variable for error in script to 1. fi } # Function: If there has been an error in the script open the log file. verify () { if [ $ERROR = 1 ]; then { echo "Error: Mobisync encountered an error in execution"; line; } >> $LOG open $LOG echo "NOTIFICATION: Syncing completed with some errors." else { echo "Success: Mobisync completed successfully"; line; } >> $LOG echo "NOTIFICATION: Syncing is complete" fi } # Function: Creates a horizontal line in the text file. line () { printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - >> $LOG # Prints line } # Writes the header for the log file: Program, Version number, Date and Line. { echo "mobisync 13.0"; echo "Log: " `date`; line; } >> $LOG # Syncing images and video on device to the Downloads folder on computer. { adb shell find "/sdcard/DCIM/" -type f -iname \*.jpg -o -type f -iname \*.mp4 -o -type f -iname \*.dng | tr -d '\015' | while read line; do adb pull "$line" $DOWNLOADS; done; adb shell rm -rf "/sdcard/Pictures/.thumbnails/"; adb shell find "/sdcard/Pictures/" -type f -iname \*.jpg -o -type f -iname \*.mp4 -o -type f -iname \*.dng | tr -d '\015' | while read line; do adb pull "$line" $DOWNLOADS; done; } >> $LOG catcher Images line # Syncing documents on device to the Downloads folder on computer. { adb-sync --reverse --delete /sdcard/Documents/Checkin/ ~/Documents/Checkin; adb-sync --reverse --delete /sdcard/Documents/Logistics/ ~/Documents/Logistics; adb-sync --reverse --delete /sdcard/Documents/Exercise/ ~/Documents/Exercise; adb-sync --reverse --delete /sdcard/Documents/Finances/ ~/Documents/Finances; adb-sync --delete ~/Documents/Papers.sparsebundle/ /sdcard/Documents/Papers.sparsebundle; adb-sync --reverse /sdcard/Download/ $DOWNLOADS; adb shell rm -rf /sdcard/Download/*; } >> $LOG catcher Documents line # Syncing Automate data on device to the computer. { adb-sync -2 --exclude .git ~/Projects/Programming/push/automate /sdcard/.automate/Interface/; adb-sync --reverse --delete /sdcard/.automate/ ~/Mobile/Automate/; } >> $LOG catcher Automate line # Syncing app, recovery and backups. { adb-sync -2 ~/Mobile/Restore /sdcard/Restore/; adb-sync --reverse /sdcard/Backup/ ~/Mobile/Backup/; } >> $LOG catcher Backup line # Syncing Music from the computer. { adb-sync --delete ~/Music /sdcard/Music/; } >> $LOG catcher Music line # Notification that the sync is over. printf "Syncing is complete. END" >> $LOG line verify $ERROR echo "QUITAPP"