GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir mtime d'un fichier spécifique en utilisant Bash ?

stat peut vous donner cette information :

filemtime=$(stat -c %Y myfile.txt)

%Y vous donne la dernière modification en "secondes depuis The Epoch", mais il y a beaucoup d'autres options ; Plus d'informations. Donc, si le fichier a été modifié le 2011-01-22 à 15h30 GMT, ce qui précède renverrait un nombre dans la région de 1295710237.

Modifier :Ah, vous voulez le temps en jours depuis qu'il a été modifié. Cela va être plus compliqué, notamment parce qu'un "jour" n'est pas une période de temps fixe (certains "jours" n'ont que 23 heures, d'autres 25 - grâce à l'heure d'été).

Le naïf la version pourrait ressembler à ceci :

filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff

... mais encore une fois, cela suppose qu'une journée dure toujours exactement 86 400 secondes.

Plus d'informations sur l'arithmétique en bash ici.


AGE=$(perl -e 'print -M $ARGV[0]' $file)

définira $AGE sur l'âge de $file en jours, comme le -M de Perl l'opérateur gère le stat appel et la conversion en jours pour vous.

La valeur de retour est une valeur à virgule flottante (par exemple, 6,62849537 jours). Ajouter un int à l'expression si vous avez besoin d'un résultat entier

AGE=$(perl -e 'print int -M $ARGV[0]' $file)

Ruby et Python ont également leurs one-liners pour stat un fichier et renvoyer des données, mais je pense que Perl a le moyen le plus concis.


L'utilitaire de date dispose d'un commutateur pratique pour extraire le mtime d'un fichier, que vous pouvez ensuite afficher ou stocker à l'aide d'une chaîne de format.

date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")

Voir man date , la sortie de date est contrôlée par une chaîne de format commençant par "+"

Les chaînes de format utiles pour comparer plusieurs dates peuvent inclure :

"+%j": day of year
"+%s": unix epoch time

L'arithmétique avec les dates est un peu pénible, donc si vous avez besoin d'un temps relatif qui fonctionnera dans tous les cas, vous feriez peut-être mieux d'utiliser une autre langue.


Linux
  1. rechercher et copier un fichier à l'aide de Bash

  2. Python FTP obtient le fichier le plus récent par date

  3. Comment obtenir la date/heure de création du fichier dans Bash/Debian ?

  4. Rediriger toutes les sorties vers un fichier à l'aide de Bash sous Linux ?

  5. Comparaison de dates dans Bash

Comment obtenir la date et l'heure actuelles en Python

Comment changer automatiquement l'arrière-plan de GNOME par intervalles à l'aide de BASH

Utilisation de la commande Linux Basename dans les scripts Bash

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Obtenir une ligne spécifique à partir d'un fichier texte en utilisant uniquement un script shell

Obtenir la date de la dernière modification du fichier sous Linux