Esto parece una pregunta fácil de investigar. No lo es. Estoy siguiendo la siguiente publicación altamente recomendada en un sitio de Ubuntu Stack Exchange con el que me encontré. Pero la sugerencia no funciona en Red Hat Enterprise Linux ES versión 4. Lo esperaba, pero falla, como se detalla a continuación.
Este es elsugerencia: En concreto, el cartel recomienda
Si desea modificar el archivo en relación con su hora de modificación existente, lo siguiente debería ser suficiente:
touch -d "$(fecha -R -r nombre de archivo) - 2 horas" nombre de archivo
Esto no me funciona en Redhat. El signo menos se ignora y la hora se adelanta dos días como si hubiera entrado
touch -d "$(date -R -r filename) + 2 hours" filename
Por ejemplo:
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Oct 27 12:59 test
$ touch -d "$(date -R -r test) - 8 days" test
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Nov 4 2016 test
$ touch -d "$(date -R -r test) + 8 days" test
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Nov 12 2016 test
Ya sea que utilice un signo menos o un signo más, la fecha se ajusta hacia adelante.
¿Es esto un error en alguna versión del tacto?
¿Existe otra forma de ajustar la marca de tiempo de un archivo en relación con su marca de tiempo actual?
Respuesta1
Respuesta actualizada
touch -r filename -d '+8 days' filename
De info coreutils touch invocation
(Gracias @don_crissti):
'-r ARCHIVO'
'--referencia=ARCHIVO'
Use the times of the reference FILE instead of the current time. If this option is combined with the '--date=TIME' ('-d TIME') option, the reference FILE's time is the origin for any relative TIMEs given, but is otherwise ignored. For example, '-r foo -d '-5 seconds'' specifies a time stamp equal to five seconds before the corresponding time stamp for 'foo'. If FILE is a symbolic link, the reference timestamp is taken from the target of the symlink, unless '-h' was also in effect.
Si desea una expansión variable, puede usar comillas suaves alrededor del -d
argumento de esta manera.
DAYS=8
touch -r filename -d "+${DAYS} days" filename
Muestra:
$ ls -l foo.bar
-rw-r--r-- 1 usr usr 69414810 Nov 10 2016 foo.bar
$ TEST=100
$ touch -r foo.bar -d "+${TEST} days" foo.bar
$ ls -l foo.bar
-rw-r--r-- 1 usr usr 69414810 Feb 24 2017 foo.bar