Comment utiliser touch pour définir l'horodatage modifié / créé d'un file?

Cela ressemble à une question facilement recherchée. Ce n'est pas le cas. Je suis le post suivant fortement recommandé sur un site Ubuntu Stack Exchange que je suis passé à travers. Mais la suggestion ne fonctionne pas sur la version 4 de Red Hat Enterprise Linux ES. Je l'aurais attendu, mais il échoue, comme détaillé ci-dessous.

Voici la suggestion : Plus précisément, l'affiche recommand

Si vous souhaitez modifier le file par rapport à son heure de modification existante, ce qui suit devrait faire l'affaire:

touchez -d "$ (date -R -r nom de file) – 2 heures" nom de file

Cela ne fonctionne pas pour moi sous Redhat. Le signe less est ignoré et le time est fixé deux jours comme si j'avais entré

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

Par exemple:

 $ 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 

Que j'utilise un signe less ou un signe plus, la date est ajustée en avant.

Est-ce un bug dans certaines versions de touch?

Existe-t-il un autre moyen d'ajuster l'horodatage d'un file par rapport à son horodatage actuel?

Réponse mise à jour

Je suis tombé sur ce bijou

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

De l' info coreutils touch invocation (Merci @don_crissti):

'-r FICHIER'

'–reference = FICHIER'

  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 vous voulez une extension variable, vous pouvez utiliser des guillemets autour de l'argument -d comme ceci.

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

Échantillon:

 $ 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