So komprimieren Sie Dateien basierend auf einem Dateidatum

So komprimieren Sie Dateien basierend auf einem Dateidatum

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 -mtimeist 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

( datekann nur die Änderungszeit lesen. Denn ctimewir müssten statmehr 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.

verwandte Informationen