Como usar o toque para definir o timestamp modificado / criado de um arquivo?

4

Isso parece uma pergunta facilmente pesquisada. Não é. Estou seguindo o seguinte post altamente recomendado em um site do Ubuntu Stack Exchange que aconteceu de eu encontrar. Mas a sugestão não funciona no release 4 do Red Hat Enterprise Linux ES. Eu teria esperado, mas falha, conforme detalhado abaixo.

Este é o sugestão : Especificamente, o cartaz recomenda

If you want to modify the file relative to its existing modification time instead, the following should do the trick:

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

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

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

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

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

Existe outra maneira de ajustar o registro de data e hora de um arquivo em relação ao timestamp atual?

    
por Steve Cohen 27.10.2016 / 21:14

1 resposta

3

Resposta atualizada

Eu tropecei nessa gema

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

Do info coreutils touch invocation (obrigado @don_crissti):

'-r FILE'

'--reference=FILE'

 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ê quiser expansão de variáveis, você pode usar aspas suaves ao redor do argumento -d da forma como é.

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
    
por 27.10.2016 / 21:44

Tags