Respuesta actualizada

Respuesta actualizada

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

Me topé con esta joya

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 -dargumento 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

información relacionada