web-dev-qa-db-fra.com

Comment puis-je modifier la date de «changement» du fichier?

Comment puis-je changer la date de "changement"?

$ touch -t 9901010000 test;stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fe01h/65025d    Inode: 11279017    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    x)   Gid: ( 1000/    x)
Access: 1999-01-01 00:00:00.000000000 +0100
Modify: 1999-01-01 00:00:00.000000000 +0100
**Change: 2012-04-08 19:26:56.061614473 +0200**
 Birth: -
24
Someone1234

Vous ne pouvez pas changer le TEMPT par des moyens ordinaires. Ceci est par conception: le TEMBE est toujours mis à jour au courant lorsque vous modifiez l'une des métadonnées du fichier et que vous n'aurez aucun moyen d'imposer un Time différent. Pour modifier le Time d'un fichier, vous devez faire l'une des opérations suivantes:

  • Définissez la durée du système sur la chaîne CTRE que vous souhaitez imposer, puis appuyez sur le fichier, puis réinitialisez le temps système.
  • Modifiez le noyau pour ajouter une interface pour modifier le Time.
  • Accédez directement à l'image du disque (par exemple avec debugfs) et twiddle les bits sur le disque (ne le faites pas pendant monté du système de fichiers).

Vous avez la réponse sur l rapproquement SO Question pointée par JW013, pour Extx, sur Disque non monté :

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches
13
Coren

Le Time d'un fichier est mis à jour lorsque l'une des métadonnées est modifiée.

$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
$ stat -c %z x.py
2010-03-26 11:57:56.237068175 -0400
$ chown ignacio x.py
$ stat -c %z x.py
2012-04-08 15:31:33.682383575 -0400
$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py

Evandrix 's Réponse Extrait de la ligne suivante,
NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"
[.____] doit être amélioré comme décrit ci-dessous:

Dans certains systèmes comme le mien, date sortie ne donne pas de format valide à définir avec date -s

Mon système bash Version shell: GNU BASH, version 5.0.3 (1) -Release (x86_64-pc-linux-gnu)
[.____] Mon système date version de commande: date (GNU Coreutils) 8.30

Mon système date Sortie de commande et réglage de la date avec ce format est:

# date
Tue 21 Jan 2020 01:36:22 PM +03
# date -s "Tue 21 Jan 2020 01:36:22 PM +03"
date: invalid date ‘Tue 21 Jan 2020 01:36:22 PM +03’

Il est donc nécessaire d'améliorer Evandrix réponse;
[.____] Il serait préférable d'attribuer la variable maintenant à la valeur horodatale
[.____] change NOW=$(date) à NOW=$(date +@%s)

  NOW=$(date +@%s) && date -s "2030-08-15 21:30:11" && \
  touch file.txt && date -s "$NOW"

Ajout de la commande Sudo pour l'utilisateur non root

  Sudo bash -c 'NOW=$(date +@%s);
                date -s "2030-08-15 21:30:11";
                touch file.txt;
                date -s "$NOW"'

ou

  Sudo bash -c 'NOW=$(date +@%s); date -s "$2"; touch "$1"; date -s "$NOW"' -- \
                "file.txt" "2030-08-15 21:30:11"

De cette manière pour une utilisation facile, le nom de fichier et la date de réglage sont attribués en tant qu'arguments à la fin de la ligne.

0