Bash脚本:把安卓手机上的照片或截屏以增量的方式下载到本地

写了一个Bash脚本,把安卓手机上的照片或截屏以增量的方式下载到本地,即每次运行,只下载本地没有的文件,如果本地已经有同名文件,则会比较MD5值,不同时下载,相同时跳过。

在MacOS上测试通过。

#!/bin/bash
counter=0

PS3='Choose where to download photos from the connected Android phone: '
options=("Camera" "Screenshot" "Do nothing" "Quit")
select opt in "${options[@]}"
do
    case $REPLY in
        "1")
            echo 
        TARGET_DIR="/sdcard/DCIM/Camera/"
        break
            ;;
        "2")
            echo
        TARGET_DIR="/sdcard/Pictures/Screenshots/"
            break
            ;;
        "3")
            echo "You chose choice $REPLY which is $opt"
            ;;
        "4")
            exit 1
            ;;
        *) echo "Invalid option $REPLY";;
    esac
done

FILE_LIST=`adb shell find $TARGET_DIR -maxdepth 1 -type f`

for file_with_path in $FILE_LIST
do
    NAME_with_EXT=${file_with_path##*/}
    if [ ! -f "$NAME_with_EXT" ]
    then
        echo "> "$NAME_with_EXT
        echo -ne "  + Pulling file to local: $NAME_with_EXT"
        adb pull $file_with_path
        counter=$((counter+1));
    else
        echo "> "$NAME_with_EXT
        echo -ne "  ? Already exists. Comparing MD5 now ... "
        MD5phone=`adb shell md5sum $file_with_path |cut -d' ' -f 1`
        MD5local=`md5 $NAME_with_EXT |cut -d' ' -f 4`

        if [ "$MD5phone" == "$MD5local" ]; then
            echo "Same MD5. Ignore"
            echo $filename
        else
            echo "Different MD5. Rename the local file, and pull the remote file to local..."
            nameonly="${NAME_with_EXT%.*}"
            extension="${NAME_with_EXT##*.}"
            newname=$nameonly-$RANDOM.$extension
            while [ -f $newname ]
            do
                newname=$nameonly-$RANDOM.$extension
            done
            mv $NAME_with_EXT $newname
            echo -ne "      "
            adb pull $file_with_path
            counter=$((counter+1));
        fi
    fi
done

echo
echo Total files downloaded: $counter

你可能感兴趣的:(Bash脚本:把安卓手机上的照片或截屏以增量的方式下载到本地)