2009-06-30 5 views
0

Ich schreibe ein Skript, das in einem benutzerdefinierten Berichtsverzeichnis sucht, es in einen Arbeitsordner kopiert, zusammen mit den Datendateien, die es anzeigen wird, den Bericht ausführt, die neu erstellten Dateien zippt und sie auf einen anderen Server hochlädt .Wie kann man nur neue Dateien von der Ausführung eines Berichts in einem Bash-Skript komprimieren?

Das Problem, das ich renne ist, dass ich nicht weiß, was die neu erstellten Dateien überhaupt (oder Dateierweiterungen) aufgerufen werden. Ich habe mich gefragt, ob es eine Möglichkeit gibt, zu zippen oder herauszufinden, was die neu erstellten Dateien waren (im Vergleich zu bevor der Bericht ausgeführt wurde und danach).

Ich würde die Zeitstempel betrachten und einfach die neuesten Dateien irgendwo verschieben, um sie zu komprimieren, aber die Berichte, die gerade ausgeführt werden, könnten möglicherweise mehrere Dateien zu unterschiedlichen Zeiten erstellen (z. B. zuerst eine Telefonberichtdatei, dann eine Daten) Datei melden).

Irgendwelche Ideen, wie ich das erreichen könnte?

+0

Wissen Sie, wie viele Dateien wird es geben? – Tynan

+0

Nein. Ich weiß nichts über die Dateien, die ausgegeben werden würden. (Namen, Größen, Anzahl der Dateien usw.) –

Antwort

2

ähnliche Idee mit Tynan ist:

touch report_start 
./run_report 
find $working_dir -type f -newer report_start | tar czf $archive 
rm report_start 
+0

finden Sie ein verrücktes Schweizer-Armee-Biest eines Werkzeugs. Hatte keine Ahnung von dem neueren Param. Vielen Dank! – seth

+0

Wow, ich wusste nie über Fund. Danke Jungs, ich schätze es sehr. :) –

+0

Hmm, genau wie ich dachte, das würde funktionieren. Aus irgendeinem Grund wird die berührte Datei nicht älter als die erstellten Dateien angezeigt. Ich habe Schlafzähler dort hingestellt, denkend, dass es vielleicht ist, weil, wenn es weniger als eine Sekunde ist, der Zeitstempel gleich aussehen würde, aber das hat auch nicht funktioniert. Im Moment werde ich alle Dateien zu einem früheren Zeitpunkt anfassen, um zu sehen, ob das funktioniert, aber ich weiß nicht, ob dies das Problem beheben wird. –

1

Sie sollten in der Lage sein, so etwas zu tun:

touch report_start 
./run_report 
for i in `ls -Rt`; do 
    echo $i | grep report_start 
    if [ $? -eq 0 ]; then 
     break  
    fi 
    cp $i reports 
done 
rm reports/report_start 
tar xvzf reports.tar.gz reports 
rm report_start 

, die in dem Verzeichnis durch jede Datei Loops, zu sehen, wenn sie neuer sind als eine Datei erstellt haben, bevor Sie den Bericht ausgeführt wurde, und macht dann eine Tarball der Ergebnisse.

+0

Pars ls nie analysieren: http://mywiki.wooled.org/ParsingLs - Sie können "for i in *" verwenden - Wenn Sie Rekursion benötigen, verwenden Sie find. Sie müssen rm nicht report/report_start ausführen, da es nicht -nt selbst ist und nicht kopiert wird. –

+0

Ja, ich vergaß -Newer mit find - ich dachte, der einzige Weg nach Zeit zu sortieren wäre mit-t. – Tynan

Verwandte Themen