Ich habe mindestens 30 Dateien in einem Verzeichnis, das ältere Daten enthält, also die letzten 7 Tage. Jetzt muss ich sie basierend auf dem Erstellungs-/Änderungsdatum komprimieren.
Beispiel:
10 Dateien mit dem 7. April – erstellen Sie eine Zip-Datei für april7.zip
10 Dateien mit dem 8. April – erstellen Sie eine Zip-Datei für april8.zip
10 Dateien mit dem 9. April – erstellen Sie eine Zip-Datei für april9.zip
Antwort1
Das Übliche find -mtime
ist hier etwas schwierig zu verwenden, da es nur das Alter im Verhältnis zum aktuellen Zeitpunkt testet.
Mit GNU Date und Bash könnten wir etwa Folgendes tun, um jede Datei einem Archiv entsprechend dem Datum der Datei hinzuzufügen:
for f in * ; do
zip $(date -r "$f" +%F).zip "$f" # 2017-04-07.zip
done
oder:
for f in * ; do
d=$(date -r "$f" +%B%d)
zip ${d,,}.zip "$f" # april07.zip
done # ${var,,} is for lowercase
( date
kann nur die Änderungszeit lesen. Denn ctime
wir müssten stat
mehr Arbeit investieren, um das Ausgabeformat zu korrigieren.)
Wenn wir aus irgendeinem Grund vor der Verarbeitung eine Liste aller Dateien für ein bestimmtes Datum benötigen, können wir sie in einem Array sammeln:
files=()
date="2017-04-07"
for f in * ; do
[ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"
Daher kann jeweils nur ein einzelnes Datum verarbeitet werden.