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 -d
Argument 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