stat
può darti queste informazioni:
filemtime=$(stat -c %Y myfile.txt)
%Y
ti dà l'ultima modifica come "secondi da The Epoch", ma ci sono molte altre opzioni; Ulteriori informazioni. Quindi, se il file è stato modificato il 22-01-2011 alle 15:30 GMT, quanto sopra restituirebbe un numero nell'ordine di 1295710237.
Modifica :Ah, vuoi il tempo in giorni da quando è stato modificato. Sarà più complicato, anche perché un "giorno" non è un periodo di tempo fisso (alcuni "giorni" hanno solo 23 ore, altri 25, grazie all'ora legale).
Gli ingenui la versione potrebbe essere simile a questa:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...ma ancora una volta, presupponendo che un giorno sia sempre lungo esattamente 86.400 secondi.
Maggiori informazioni sull'aritmetica in bash qui.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
imposterà $AGE all'età di $file in giorni, come -M
di Perl operatore gestisce il stat
chiamata e la conversione in giorni per te.
Il valore restituito è un valore a virgola mobile (ad esempio, 6,62849537 giorni). Aggiungi un int
all'espressione se devi avere un risultato intero
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Anche Ruby e Python hanno le loro battute per dichiarare un file e restituire alcuni dati, ma credo che Perl abbia il modo più conciso.
L'utility data ha un comodo interruttore per estrarre l'mtime da un file, che puoi quindi visualizzare o archiviare utilizzando una stringa di formato.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Vedi man date
, l'output di date è controllato da una stringa di formato che inizia con "+"
Stringhe di formato utili per confrontare molte date potrebbero includere:
"+%j": day of year
"+%s": unix epoch time
L'aritmetica con le date è un po' una seccatura in bash, quindi se hai bisogno di un tempo relativo che funzioni in tutti i casi limite, potresti stare meglio con un'altra lingua.