Comment définir le mtime d'un fichier au format d'époque?

11

Je sais comment obtenir le mtime d'un fichier au format d'époque:

stat --format=%Y <file>

Mais je n'ai pas pu comprendre comment définir le mtime d'un fichier au format epoch. La page de manuel touch (1) semble accepter uniquement une valeur "d'horodatage" (format plus ou moins fixe qui utilise des mois, des jours, des heures, des minutes, etc.) ou une "chaîne de date lisible par l'humain au format principalement libre".

Existe-t-il un autre utilitaire que je devrais étudier?

Merci.

eil
la source
1
Veuillez toujours inclure votre système d'exploitation. Les solutions dépendent très souvent du système d'exploitation utilisé. Utilisez-vous Unix, Linux, BSD, OSX, autre chose? Quelle version?
terdon

Réponses:

10

Au moins dans le monde GNU:

touch --date=@1403970787 file

Comme avec date.

Hauke ​​Laging
la source
1

Avec perl:

$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

Cela changera le mtime de tous les fichiers dans @ARGV. (stat($_))[8]est au moment du fichier.

utime peut recevoir la liste des fichiers, si vous ne vous souciez pas de changer l'heure, vous pouvez essayer:

 $ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

Remarque

utimedépend de la bibliothèque d'exécution C et du système de fichiers utilisés. voir plus dans perldoc -f utimeet perldoc perlport.

cuonglm
la source
0

Avec la touchcommande de GNU coreutils (c'est-à-dire sur Linux non intégré et Cygwin), consultez le manuel complet (généralement disponible localement au format info) pour la documentation des formats d'entrée de date . Les dates d'époque sont indiquées avec le préfixe @:

touch -d @1234567890 foo

Cela fonctionne également avec BusyBox (au moins sur certains systèmes, cela peut dépendre des options de compilation).

Avec * BSD, je ne pense pas que vous puissiez le faire touchseul, mais vous pouvez appeler datepour formater l'heure de l'époque dans un format qui touchaccepte.

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

POSIX manque notoirement de moyens pour manipuler les dates d'époque. Vous pouvez utiliser perl .

Gilles 'SO- arrête d'être méchant'
la source