350 votes

Comment puis-je changer la date de modification/création d'un fichier ?

Existe-t-il un moyen de modifier la date de modification/création d'un fichier (qui est affichée dans Nautilus ou avec la commande ls -l) ? Idéalement, je cherche une commande qui puisse modifier l'estampille de la date et de l'heure d'un ensemble de fichiers pour les avancer ou les retarder d'un certain temps (par exemple, +8 heures ou -4 jours, etc.).

2voto

j flemm Points 939

Cela fait longtemps que je n'ai pas écrit de programme Unix, mais j'ai accidentellement mal défini l'année sur un tas de photos de Noël, et je savais que si je ne changeais pas la date de 2015 à 2014, cela poserait un problème plus tard.

C'est peut-être une tâche facile, mais je n'ai pas trouvé de moyen simple de la réaliser.

J'ai modifié un script que j'ai trouvé ici, qui à l'origine était utilisé pour modifier la date par moins un mois.

Voici le script original :

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

Voici mon script modifié qui a forcé la date à l'année "2014" :

#!/bin/bash 

# find specific files
#files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in $*
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v +1y -r $(stat -f %m  "${f}") +2014%m%d%H%M.%S) "${f}"
done

Je réalise maintenant que j'aurais pu faire une version plus générique :

#!/bin/bash 

# find specific files
#files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in $*
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch (+1y adds a year "-1y" subtracts a year)
 # Below line subtracts a year
 touch -t $(date -v -1y -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
 # Below line adds a year
 # touch -t $(date -v +1y -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

Pour utiliser ce fichier, vous devrez l'écrire et

chmod +x fn

à exécuter :

./fn files-to-change

fn=votre-nom-de-fichier-qui-est-votre-commande

Exemple

./fn *.JPG

changera la date par moins une année dans l'annuaire où vous vous trouvez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X