2015-08-14 9 views
7

Diese Frage bezieht sich auf Maßnahmen, wenn eine Datei ein Änderungsdatum hat, das älter ist als so viele Tage. Ich bin sicher, es würde für das Erstellungsdatum oder Zugriffsdatum ähnlich sein, aber für das Änderungsdatum, wenn ich:Wenn das Dateiänderungsdatum älter als N Tage ist

file=path-name-to-some-file 
N=100 # for example, N is number of days 

Wie würde ich tun:

if file modification time is older than N days 
then 
fi 
+1

Bash selbst bietet nicht die Tools, die Sie benötigen - man benötigt zusätzlich Komponenten (wie "stat" oder "find"), die von Ihrem Betriebssystem bereitgestellt werden. Bitte aktualisieren Sie diese Frage, um sie in einem bestimmten Betriebssystem zu kennzeichnen, um anzuzeigen, dass eine Antwort nur für GNU-Systeme akzeptabel ist oder dass Sie mit allen POSIX-Plattformen kompatibel sein müssen. –

Antwort

16

mehrere Ansätze zur Verfügung. Man ist nur find zu bitten, die Filterung für Sie zu tun:

if [[ $(find "$filename" -mtime +100 -print) ]]; then 
    echo "File $filename exists and is older than 100 days" 
fi 

Ein weiterer Grund ist GNU Datum zu verwenden, um die Mathematik zu tun:

# collect both times in seconds-since-the-epoch 
hundred_days_ago=$(date -d 'now - 100 days' +%s) 
file_time=$(date -r "$filename" +%s) 

# ...and then just use integer math: 
if ((file_time <= hundred_days_ago)); then 
    echo "$filename is older than 100 days" 
fi 

Wenn Sie GNU stat haben, Sie können nach dem Zeitstempel einer Datei in Sekunden fragen - seit der Epoche, und selbst etwas Mathe machen (obwohl das bei Grenzfällen möglicherweise ein bisschen ausfällt, da es Sekunden zählt - und Schalttage und dergleichen nicht berücksichtigt) - und nein t Rundung auf den Beginn eines Tages):

file_time=$(stat --format='+%Y' "$filename") 
current_time=$((date +%s)) 
if ((file_time < (current_time - (60 * 60 * 24 * 100)))); then 
    echo "$filename is older than 100 days" 
fi 

Eine weitere Option, wenn Sie nicht-GNU-Plattformen unterstützen müssen, ist zu Perl, Shell (was ich es anderen überlassen werde zu demonstrieren).

Wenn Sie allgemein mehr Informationen zu Zeitmarken aus Dateien sowie Portabilitäts- und Robustheitsbeschränkungen erhalten möchten, die diese enthalten, lesen Sie auch BashFAQ #87.

+0

Charles danke für alle Optionen, sehr hilfreich. – Ray

+0

@MaheshKharvi, die Korrektur wird geschätzt, aber bitte behalten Sie den Grund für die Bearbeitung im Metadatentext oder als versteckten Kommentar in der Quelle (mit '' Syntax); es in der Post selbst in riesigen Fettdruck zu drucken, kann als Entstellung angesehen werden, und wahrscheinlich wurde der ursprüngliche Vorschlag abgelehnt. –

Verwandte Themen