8 votos

¿Cómo cambiar la fecha de modificación de un archivo sin ser root?

¿Cómo cambio la fecha de modificación de un archivo, específicamente PNGs, en Android sin ser root?

Total Commander no pudo hacerlo con un error de permiso Acceso denegado.

8voto

Jack Wade Puntos 231

RESPUESTA BREVE:

Simplemente puedes touch el archivo o proporcionar cualquier fecha y hora en el pasado o futuro:

~$ touch /sdcard/test_file
~# debugfs -R 'stat media/0/test_file' /dev/block/bootdevice/by-name/userdata | grep crtime:
crtime: 0x5c926e0d:2d61b810 -- Mié Mar 20 21:45:01 2019
~$ touch -d '2009-2-13 14:32:55' /sdcard/test_file
~$ stat /sdcard/test_file
[...]
Acceso: 2009-02-13 14:32:55.000000000 +0000
Modificar: 2009-02-13 14:32:55.000000000 +0000
Cambio: 2019-03-20 21:45:38.067021025 +0000
 Creación: -

Algunos exploradores de archivos como MiXplorer también tienen opciones para cambiar la Hora de Modificación.
No necesitas privilegios de superusuario para cambiar mtime. Solo el archivo debe ser escribible por tu ID de usuario (aplicación en caso de Android).

DETALLES:

touch utiliza utimensat para actualizar la hora de acceso (atime) y modificación (mtime) siempre que el sistema de archivos admita que las marcas de tiempo se guarden en un inode junto con los datos del archivo.

La hora de creación (btime/crtime) - una parte del estado de archivo extendido que requiere al menos un tamaño de inode de 256 bytes - no está estandarizada, por lo que raramente es compatible con los sistemas de archivos. En los comandos anteriores, se utiliza debugfs con privilegios de root para obtener la hora de creación del archivo en ext4 porque algunas binarios de stat no se han actualizado para usar todavía statx (requiere al menos Kernel de Linux 4.11), por lo que btime aparece vacío.

Tanto btime como la hora de cambio (ctime; hora de modificación de inode/metadatos) se supone que deben ser manejados por el sistema, no simplemente modificables por el usuario.

Dado que Android está basado en Linux, hereda el concepto de inode y marcas de tiempo del mundo UNIX. Los sistemas de archivos comunes de Linux como ext4 y f2fs admiten marcas de tiempo, incluidos los sistemas de archivos emulados utilizados por Android en tarjetas SD. Otros sistemas operativos y sistemas de archivos tienen conceptos similares con terminologías ligeramente diferentes. Por ejemplo, en NTFS de Windows, la hora de "MFT Entry Modified" es muy similar a la hora de ctime de UNIX.

0 votos

touch -m no estaba funcionando para mí hoy, donde el teléfono Android está montado usando SSHFS en Ubuntu 16.04.6. Sin embargo, los archivos se copiaron correctamente al teléfono. ¡Más confuso...!

0 votos

@WinEunuuchs2Unix eso debe deberse a tus permisos de SSHFS (opciones de montaje de FUSE). El sistema de archivos emulado de Android es bastante tolerante. Incluso permite touch -d incluso si no eres el propietario del archivo (ya que todos los archivos en /sdcard son propiedad de root). En sistemas de archivos *NIX normales, utimensat/utimes tienen requisitos estrictos de permisos. Por cierto, ¿montaste /sdcard o /data/media/0 en SSHFS?

0 votos

Esto es muy embarazoso. El touch funciona manualmente pero no dentro de mi programa de Python cuando el servidor de archivos toca el teléfono. Toque el teléfono al servidor de archivos funciona. Grr tres veces he ejecutado esta actualización de dos horas a través de WiFi. De vuelta a la mesa de dibujo. Mi montaje es: echo rick | sshfs -o auto_cache,reconnect,defer_permissions -o Ciphers=aes128-ctr -o Compression=no -o password_stdin -p 2222 rick@192.168.0.11:/ /mnt/phone El montaje del servidor de archivos es diferente, con el puerto 22 por defecto y no tan complicado.

1voto

Meiki67 Puntos 1

Total Commander - sistema de archivos - marcar uno o varios archivos - toque largo - propiedades - cambiar la fecha mostrada a la que necesitas (también hay un botón "Ahora") - Guardar - ¡voila!

Por cierto, ¡Total Commander es una excelente herramienta - en todas las áreas y en todas las plataformas!

0 votos

Funciona genial (Android 11)

0 votos

Creo que el teléfono aún necesita ser rooteado. Intenté esto en un Moto y recibí un error de "Acceso denegado".

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X