2016-05-10 8 views
1

Zur Zeit lösche ich manuell alte Daten (alte mehr als 90 Tage) aus sqlite Datenbanken, also unten sind die Schritte, die derzeit dafür folgen. So Jungs Ist das möglich, diesen Job mit Bash Script zu tun?Skript zum Löschen alter Daten aus sqlite3-Datenbanken

1. cd /opt/db     (my database location) 
2. ls -lSh | head -n30   (sorting from top highest size .db files and notes all .db names) 

3. sqlite3 test1.db   (select database) 
4. delete from tbl_outbox where time<='2016-02-10 00:00:00';  (delete data older more than 90 days) 
5. vacuum; 

Es gibt mehr als 20 .db Dateien. so dass ich wieder über einen nach dem anderen Schritte 3 bis 5 wie unten

sqlite3 test2.db 

delete from tbl_outbox where time<='2016-02-10 00:00:00'; 
vacuum; 

können Sie mir jemand helfen, Bash-Skript zu erstellen, um diese Aufgabe zu tun.

dank

Antwort

2

Shell kann Schleife ... Sie bash verwenden angenommen oder KSH können Sie so etwas wie das folgende Beispiel verwenden:

cd /opt/db 
DATESTRING=$(date "+%Y-%m-%d 00:00:00" -d "now -90 day") 
for DBFILE in *.db 
do 
    echo "delete from tbl_outbox where time<='$DATESTRING'; vacuum;" | sqlite3 $DBFILE 
done 

Wenn Sie es auf eine bestimmte Liste von Datenbanken laufen zu bevorzugen Ersatz Db mit einem Leerzeichen getrennt Liste Ihrer db Dateinamen ... wenn es in Ordnung, diesen Lauf zu haben, gegen/opt/db/ Db es wird keine Bearbeitung benötigen, wenn Sie eine Datenbank

+0

Useless hinzufügen/entfernen Verwendung von ls: Ich sugg est, '$ (ls * .db)' durch '* .db' zu ersetzen. – Cyrus

+0

ja irgendwie .... es ist die ganze Befehlsersetzung, die unnötig ist, aber darin, dass Sie die Idee bekommen, dass Sie dort irgendeinen Befehl hineinlegen können. Ich nehme an, dass ich bereits gezeigt habe, dass in DATESTRING = $ (Datum "+% Y-% m-% d 00:00:00" -d "jetzt -90 Tag") Also ich werde es etit und tun, wie Sie vorschlagen. – louigi600

Verwandte Themen