¿Cómo puedo editar un archivo sin alterar su fecha de modificación? En línea de comandos. Es vi
¿podrá hacerlo?
Respuestas
¿Demasiados anuncios?La única forma que se me ocurre es almacenar su fecha de modificación antes de alterarla y luego volver a ponerla.
No conozco ninguna herramienta CLI que te permita hacer eso, sin embargo hace años escribí algo en C que utilicé para establecer la fecha de modificación de un archivo con un valor arbitrario. Sé que esta no es la respuesta que buscas, pero yo lo haría de la siguiente manera:
- obtener la hora de acceso original y la hora de modificación de un archivo, antes de modificarlo. Para ello, basta con utilizar
stat()
(lea más sobre este tema en el apartadoman 2 stat
). - alterar el archivo, utilizando
vi
o cualquier otro editor que desee - volver a poner el tiempo de modificación como estaba. Esto se puede hacer utilizando la función
utimes()
(de nuevo, puede obtener más información si consultaman 2 utimes
comando). Tenga en cuenta,utimes()
establece tanto el tiempo de acceso como el de modificación.
Editar
En realidad parece que ya hay una herramienta CLI que puede hacer eso. Según esta respuesta: ¿Cómo cambiar la fecha/hora de creación (st_birthtime) de un archivo en Lion? puede utilizar touch
para cambiar esos tiempos: touch -m
cambia el tiempo de modificación y touch -a
cambia el tiempo de acceso (puede utilizar ambas opciones en una sola llamada). Todo lo que necesitas hacer entonces es usar la opción stat
en el archivo antes de modificarlo y mostrar sus tiempos de acceso y modificación. A continuación, realice la edición y, después, utilice touch
para devolver los tiempos de acceso/modificación a sus valores de antes de la edición.
Puedes usar touch -t para cambiar los tiempos de modificación y acceso, touch -m para cambiar el tiempo de modificación, o touch -a para cambiar el tiempo de acceso. Todos ellos también cambian la hora de creación si la hora de destino es anterior a la hora de creación original.
$ ls -lT test.txt
-rw-r--r-- 1 lauri staff 3 Nov 3 15:13:42 2013 test.txt
$ date -jf %s $(stat -f%m test.txt) +%Y%m%d%H%M.%S
201311031513.42
$ vi test.txt
$ ls -lT test.txt
-rw-r--r-- 1 lauri staff 3 Nov 3 15:18:18 2013 test.txt
$ touch -t 201311031513.42 test.txt
$ ls -lT test.txt
-rw-r--r-- 1 lauri staff 3 Nov 3 15:13:42 2013 test.txt
stat -f%m especifica la cadena de formato como la hora de modificación. En date -jf, -j desactiva la fijación de la hora y -f especifica el formato.