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.
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. –