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.).
Réponse
Trop de publicités?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.
- Réponses précédentes
- Plus de réponses