Aktualisierte Antwort

Aktualisierte Antwort

Das klingt nach einer leicht zu recherchierenden Frage. Ist es aber nicht. Ich folge dem folgenden sehr empfohlenen Beitrag auf einer Ubuntu Stack Exchange-Site, auf den ich zufällig gestoßen bin. Aber der Vorschlag funktioniert nicht unter Red Hat Enterprise Linux ES Release 4. Ich hätte das erwartet, aber es funktioniert nicht, wie unten beschrieben.

Dies ist dasAnregung: Konkret empfiehlt das Poster

Wenn Sie die Datei stattdessen relativ zu ihrem bestehenden Änderungszeitpunkt ändern möchten, sollte Folgendes funktionieren:

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

Dies funktioniert bei mir unter Redhat nicht. Das Minuszeichen wird ignoriert und die Zeit wird um zwei Tage vorgestellt, als hätte ich

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

Zum Beispiel:

$ 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

Egal ob ich ein Minuszeichen oder ein Pluszeichen verwende, das Datum wird nach vorne verschoben.

Handelt es sich hierbei um einen Fehler in einer Touch-Version?

Gibt es eine andere Möglichkeit, den Zeitstempel einer Datei im Verhältnis zu ihrem aktuellen Zeitstempel anzupassen?

Antwort1

Aktualisierte Antwort

Ich bin über dieses Juwel gestolpert

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

Aus dem info coreutils touch invocation(Danke @don_crissti):

'-r DATEI'

'--reference=DATEI'

 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.

Wenn Sie eine Variablenerweiterung wünschen, können Sie das -dArgument in weiche Anführungszeichen setzen, wie hier gezeigt.

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

Probe:

$ 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

verwandte Informationen