¿Qué 'toca' el comando cuando se aplica a un directorio?
$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
¿Qué 'toca' el comando cuando se aplica a un directorio?
$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
Respuestas:
Como se indica en la página de manual , el uso principal de touch
este es:
Actualice los tiempos de acceso y modificación de cada ARCHIVO a la hora actual.
Por lo tanto, actualiza los tiempos de acceso y modificación del directorio.
El ejemplo en la parte superior no deja en claro que "tocar" establece la hora del directorio (la nueva hora en la lista fue la misma que la original, simplemente porque el toque fue tan pronto después de que se creó el directorio). Sí, la definición de "ARCHIVO" en la documentación incluye directorios, por lo que puede usar el tacto para cambiar sus marcas de tiempo, PERO ...
Hay algunas situaciones en las que no puede cambiar la marca de tiempo de un directorio (para algunos tipos de directorios montados remotamente) incluso si tiene permiso para hacer cualquier otra cosa. Por ejemplo, este montaje NFS:
$ touch -d "2014-07-02 12:15" /public/test.dir
touch: setting times of ‘/public/test.dir’: Operation not permitted
Además, puede tener problemas con algunas fechas antiguas que no son compatibles con algunos servidores, por ejemplo:
$ mkdir /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir
Esto funciona:
$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr 1 2014 /Acer/kopies/test.dir
Esto funcionaría en un directorio local pero da una fecha extraña en los montajes de Samba:
$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26 60410 /Acer/kopies/test.dir
~~~~~~~~~~~~~
touch
es un programa estándar de Unix que se usa para cambiar las marcas de tiempo de acceso y modificación de un archivo. También se usa para crear un nuevo archivo vacío.La especificación Single Unix (SUS) especifica que la función táctil debe cambiar los tiempos de acceso, los tiempos de modificación o ambos para un archivo. El archivo se identifica mediante un nombre de ruta proporcionado como un argumento único. También especifica que si el archivo identificado no existe, el archivo se crea y los tiempos de acceso y modificación se establecen como se especifica. Si no se especifican nuevas marcas de tiempo, toque usa la hora actual.
-Wikipedia
Puede encontrar información más detallada sobre el touch
comando (o cualquier otro comando que desee conocer) utilizando el man
comando de esta manera:
man touch
La razón inmediata de la pregunta es el hecho de que la resolución de tiempo predeterminada ls -l
es en minutos, por lo que una entrada del sistema de archivos tocada en el mismo minuto aparecerá exactamente igual en la ls -l
salida predeterminada .
La solución a esto se describe en /superuser/355318/how-to-have-linux-ls-command-show-second-in-time-stamp
y básicamente implica la ejecución en su ls -l --time-style=full-iso
lugar.