So finden und tar-Dateien dann löschen


0

Ich muss Dateien finden, die älter als 30 Tage sind, tarieren und komprimieren und diejenigen entfernen, die ich bereits tariert und komprimiert habe.

Ich habe versucht, so etwas auszuführen, aber es sieht nicht so aus, als würde es funktionieren

find /u01/oracle/files -mtime +30 -exec tar -czvf filename_$(date +%Y-%m-%d).tar.gz /u01/oracle/files {} \;

Antworten:


0

Der Befehl funktioniert nicht, da für jede gefundene Datei findeine neue tarInstanz aufgerufen wird und jede tarInstanz die Archivdatei mit einer neuen überschreibt, die nur die Datei enthält, von der sie bereitgestellt wurde find. Sie möchten findeine vollständige Liste aller Dateien zusammenstellen und diese Liste dann an eine einzige weitergeben tar:

find /u01/oracle/files -mtime +30 -print0 | tar -czvf filename_$(date +%Y-%m-%d).tar.gz --null -T /dev/stdin

Wenn Ihre Version dies tarunterstützt, fügen Sie das --remove-filesFlag hinzu, um Quelldateien zu entfernen, die erfolgreich komprimiert wurden.

Wenn Ihr tardieses Flag nicht unterstützt, können Sie stattdessen dieses Skript verwenden:

#!/bin/bash -e
filelist="$(mktemp)"
find /u01/oracle/files -mtime +30 -print0 > "$filelist"
tar -czvf "filename_$(date +%Y-%m-%d).tar.gz" --null -T "$filelist"
xargs -0 rm < "$filelist"
rm "$filelist"

Wenn Sie eine temporäre Datei zum Speichern der Liste verwenden, anstatt sie neu zu generieren, wird verhindert, dass eine Datei möglicherweise nicht alt genug für den tarBefehl ist. Zum Zeitpunkt der Erstellung des Archivs ist jedoch die Zeit abgelaufen und es stimmen mehr Dateien überein.

Vergewissern Sie sich, dass das -eim shebang (erste Zeile) enthalten ist. Wenn Sie es weglassen, ignoriert bash Fehler der ausgeführten Befehle, was möglicherweise zu Datenverlust führen kann.


Ich
erhalte

oracle $ find / u01 / oracle / files -mtime +60 -print0> /tmp/filelist.txt tar -czvf Dateiname _ $ (Datum +% Y-% m-% d) .tar.gz --null -T / tmp /filelist.txt xargs -0 rm </tmp/filelist.txt rm /tmp/filelist.txt find: Pfade müssen vor dem Ausdruck stehen: tar Verwendung: find [-H] [-L] [-P] [-Olevel] [ -D help | tree | search | stat | rates | opt | exec] [path ...] [expression]
R_Mat

@R_Mat Ich habe die Antwort zu diesem Teil verbessert und geklärt, siehe den bearbeiteten Code.
Wüstengecko

#! / bin / bash -e Dateiliste = "$ (mktemp)" find /u01/oracle/files/*.aud -mtime +30 -print0> "$ Dateiliste" tar -czvf "Dateiname _ $ (Datum +% Y- % m-% d) .tar.gz "--null -T" $ filelist "xargs -0 rm <$ filelist" rm "$ filelist"
R_Mat 20.10.18

Wenn ich es wie oben
ausführe, erhalte
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.