Resposta atualizada

Resposta atualizada

Esta parece uma questão facilmente pesquisada. Não é. Estou seguindo a seguinte postagem altamente recomendada em um site do Ubuntu Stack Exchange que encontrei. Mas a sugestão não funciona no Red Hat Enterprise Linux ES versão 4. Eu esperava que funcionasse, mas falha, conforme detalhado abaixo.

Isto é osugestão: Especificamente, o autor da postagem recomenda

Se você quiser modificar o arquivo em relação ao horário de modificação existente, o seguinte deve resolver:

touch -d "$(data -R -r nome do arquivo) - 2 horas" nome do arquivo

Isso não funciona para mim no Redhat. O sinal de menos é ignorado e a hora é adiantada em dois dias, como se eu tivesse digitado

touch -d "$(date -R -r filename) + 2 hours" filename

Por exemplo:

$ 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

Quer eu use um sinal de menos ou de mais, a data será ajustada para frente.

Isso é um bug em alguma versão do touch?

Existe outra maneira de ajustar o carimbo de data/hora de um arquivo em relação ao carimbo de data/hora atual?

Responder1

Resposta atualizada

Me deparei com essa joia

touch -r filename -d '+8 days' filename

Do info coreutils touch invocation(Obrigado @don_crissti):

'-r ARQUIVO'

'--referência=ARQUIVO'

 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.

Se você deseja expansão de variável, pode usar aspas suaves ao redor do -dargumento, assim.

DAYS=8
touch -r filename -d "+${DAYS} days" filename

Amostra:

$ 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

informação relacionada