Debe haber aplicaciones para facilitar lo que quieres lograr, pero uno de los métodos muy sencillo (para mí al menos) es utilizar un shell script como sugiere @alecxs en el comentario. Podemos leer la fecha de la foto tomada usando exiv2
herramienta de línea de comandos. Puede construir desde fuente o intente este . O bien, obtener la hora modificada de la foto utilizando stat
pero el primero suele ser más preciso porque algunos programas como los exploradores de archivos cambian mal la fecha de modificación, por ejemplo, durante la operación de copia/movimiento.
Una vez conocido el mes de la foto, cree la carpeta correspondiente y mueva la foto allí:
#!/system/bin/sh
set -e
DIR='/sdcard/DCIM/100ANDRO'
find $DIR -maxdepth 1 -type f -iname '*.jp*g' -o -iname '*.png' |
while read -r photo
do
month=$(exiv2 -q pr "$photo" | busybox awk -v c=1 -F '[: ]' '/timestamp.*[0-9]{4}:[0-9]{2}:[0-9]{2}/{print $5"_"$6; c=0} END{exit c}') ||
month=$(busybox stat -c %y "$photo" | busybox awk -v c=1 -F '[- ]' '/[0-9]{4}-[0-9]{2}-[0-9]{2}/{print $1"_"$2; c=0} END{exit c}') ||
{ echo "Couldn't find month for $photo" >&2; continue; }
mkdir -p "$DIR/$month"
mv -n "$photo" "$DIR/$month/"
done
echo Done.
Android's awk
y stat
tienen errores o muestran un comportamiento no estándar. Es mejor utilizar busybox.
Llamemos al script sort.sh
. Así es como funciona:
~$ find /sdcard/DCIM/100ANDRO/ -type f
/sdcard/DCIM/100ANDRO/00100sPORTRAIT_00100_BURST20190222182032908_COVER.jpg
/sdcard/DCIM/100ANDRO/IMG_20170312_013609.jpg
/sdcard/DCIM/100ANDRO/IMG_20180818_180827_HDR.jpg
/sdcard/DCIM/100ANDRO/IMG_20190222_164812.jpg
/sdcard/DCIM/100ANDRO/PANO_20190421_132245.jpg
~$ sort.sh
Done.
~$ find /sdcard/DCIM/100ANDRO/ -type f
/sdcard/DCIM/100ANDRO/2017_03/IMG_20170312_013609.jpg
/sdcard/DCIM/100ANDRO/2018_08/IMG_20180818_180827_HDR.jpg
/sdcard/DCIM/100ANDRO/2019_04/PANO_20190421_132245.jpg
/sdcard/DCIM/100ANDRO/2019_02/00100sPORTRAIT_00100_BURST20190222182032908_COVER.jpg
/sdcard/DCIM/100ANDRO/2019_02/IMG_20190222_164812.jpg
Además, puede utilizar file
(en lugar de basarse en las extensiones de los archivos) para mover sólo las fotos y no los vídeos u otros archivos. Pero, de nuevo, Android /system/bin/file
es muy limitada. O bien utilizar uno de Termux, o construir a partir de fuente o intente este .
Puedes ejecutar este script manualmente o de forma regular utilizando alguna aplicación de automatización. crond
también es una opción si tienes Root.
También me interesaría conocer las alternativas a las opciones de USB -> browse device
Esta parte es en sí misma una pregunta aparte. Si quieres navegar por los archivos desde el PC puedes optar por adbfs
SSHFS/SFTP, FTP, WebDAV, SMB, etc. O simplemente para transferir archivos adb pull
será suficiente y es razonablemente más rápido. Si tienes Root y el volumen de datos a transferir es alto, considera usar el almacenamiento masivo USB (UMS) del custom recovery. Es un método muy rápido y fiable.