Je recherche une commande pour obtenir la date de modification du fichier dans Unix, y compris le champ année sans utiliser stat
car nous utilisons SunOS 5.10.
Actuellement quand j’utilise
ls -lrt A.sh
nous obtenons les détails suivants:
-rw-r--r-- 1 dev dev 593 Jan 1 02:18 A.sh
Comment puis-je obtenir l’année?
Voici une manière un peu hackée:
truss -t lstat64 -v lstat64 /bin/ls A.sh 2>&1 | nawk '/mt =/ {printf("%s %2s %s %s %s\n",$3,$4,$5,$6,$7);}'
Comme il s’agit d’un site de programmation Q, je mettrais simplement en œuvre un petit programme C qui extrait les informations à l’aide de l’appel de stat
.
Il vous donne une struct stat
qui contient les valeurs time_t
pour les temps d’access, de modification et de changement d’état.
Vous pouvez ensuite utiliser localtime
pour en faire une struct tm
et extraire les champs appropriés pour la sortie (de la mémoire, tm_year + 1900
, tm_mon + 1
et tm_mday
plus les temps si vous en avez besoin).
Vous pouvez essayer ceci,
perl -MPOSIX -le 'print strftime "%d %b %Y %H:%M ".$_, localtime((lstat)[9]) for @ARGV' a.sh
ls
a l’option --time-style
:
--time-style=STYLE with -l, show times using style STYLE: full-iso, long-iso, iso, locale, or +FORMAT; FORMAT is inter‐ preted like in 'date'; if FORMAT is FORMAT1
FORMAT2, then FORMAT1 applies to non-recent files and FORMAT2 to recent files; if STYLE is prefixed with 'posix-', STYLE takes effect only outside the POSIX locale
qui contient des formats préchargés tels que long-iso
ls -lrt --time-style=long-iso A.sh
-rw-r--r-- 1 dev dev 593 2014-01-02 02:18 A.sh
ou vous pouvez définir votre propre basé sur les formats de date
ls -lrt --time-style="+%Y-%m-%d %a %T" A.sh
-rw-r--r-- 1 dev dev 593 2014-01-02 Tue 02:18:00 A.sh