mymeyer
Goto Top

cp-Befehl mehrere Dateien kopieren

Hallo,

folgendes Problem habe ich wo ich keine Lösung so richtig finde. Ich möchte einen Script über Cron starten.Kurze Vorgeschichte: Bei uns auf dem System werden täglich mehrer Log-Files geschrieben die automatisch nach nach ca. 2,5 Tagen immer wir bei Log-File 01 beginnen. Ich möchte jetzt immer nur die aktuellenTages Log in ein anderes Verzeichnis kopieren inkl Datums Erweiterung am Log-File Name.

Ich habe mir jetzt mit "find" eine Zeile geschrieben wo er nur die Log-Files vom aktuellen Tag kopieren soll. Der Job startet um 23:59h. Das Problem was ich habe ist das es das an zwei verschiedenen Tagen gleiche Log-Files Namen gibt und der Job die alten Files überschreiben.

Hier mal ein Auflistung wie ich mir das vorstelle:

Log.01
Log.02
Log.03
Log.04
..
.. (So schreibt das System die Logfiles täglich max 100 in Summe).

ich möchte jetzt folgendes erreichen mit dem CP-Befehl.

Beispiel:

Heuet ist der 15.04.2009

cp Log.01 /tmp/2009-04-15.log.01
cp Log.02 /tmp/2009-04-15.log.02
cp Log.03 /tmp/2009-04-15.log.03
cp Log.04 /tmp/2009-04-15.log.04

Nächte Tage: 16.04.2009

cp Log.01 /tmp/2009-04-16.log.01
cp Log.02 /tmp/2009-04-16.log.02
cp Log.03 /tmp/2009-04-16.log.03
cp Log.04 /tmp/2009-04-19.log.04


Ich kann die Files auch nicht verschieben mit mv da das System die Anzahl 100 Log-Files benötigt. Warum ich das machen will. Ich möchte die Logfiles über einen bestimmten Zeitraum sammeln für Analysen z.B. und später dann wieder über eine Cron-Job löschen. Aber mit dem cp-Befehl bekomme ich das nicht hin.


Aufruf ist:

datum=`/bin/date +%Y-%m-%d`
find /log/ -mtime 0 -type f -name "\Log.*" -exec cp -p {} /tmp/"$datum".log.01 \;

Gruß
MyMeyer

Content-Key: 113877

Url: https://administrator.de/contentid/113877

Printed on: May 5, 2024 at 05:05 o'clock

Member: godlie
godlie Apr 15, 2009 at 10:38:52 (UTC)
Goto Top
Wie wärs mit sowas:

#!/bin/sh
dt=`date +%Y-%m-%d`
for i in $( ls Log.* ); do
rn=`echo $i | cut -d "." -f 2`;  
echo $dt.log.$rn;
cp $i /tmp/$dt.log.$rn
done
Mitglied: 75823
75823 Apr 16, 2009 at 09:19:11 (UTC)
Goto Top
Ich hab noch nicht ganz die Logik verstanden wie die Logst entstehen. Kannst du bitte die Ergebnis von "ls -lct /deinlog/" posten?
Member: mymeyer
mymeyer Apr 16, 2009 at 12:01:33 (UTC)
Goto Top
Zitat von @75823:
Ich hab noch nicht ganz die Logik verstanden wie die Logst entstehen.
Kannst du bitte die Ergebnis von "ls -lct /deinlog/" posten?

Hi,

ich verstehe nicht was du jetzt meinst. Die Log-Files werden von einer Application erzeugt und liegen im LOG Verzeichnis.
Da wir aber so viel LOG schreiben (wird auch benötigt) möchte ich die Dateien tagesbezogen kopieren. Die Anzahl erhöhen oder die Files vergrössern geht auch nicht weil auf dem Filesystem nicht genug Platz vorhanden ist. Deswegen auf ein anderes Filesystem kopieren. Dort werde ich sie dann wieder nach ein paar Tagen löschen.

Gruß
MyMeyer
Mitglied: 75823
75823 Apr 16, 2009 at 14:17:48 (UTC)
Goto Top
Lesen kann ich, das selbe hasst du erstes mal auch geschrieben.
Ich will wissen welche Kriterien hat das Programm für die Logs, ob die sie nach Größe oder nach Zeit trennt. Dann kann man ein vernünftigen Skript machen der die Logs ohne Wiederholung speichert.
Member: mymeyer
mymeyer Apr 16, 2009 at 19:27:55 (UTC)
Goto Top
Hi,

Upps face-smile Jetzt habe ich es auch verstanden. Na ja die Log Files sind immer 10 MB groß und es werden max 101 Stück geschrieben.
Und schreibt es erst ins Haupt Log und wenn das 10 MB erreicht hat wird es weg geschrieben. Die aktuellen Info kommen immer ins Haupt Log.

1. Haupt Log = logging.log
2. Folge Log = logging.old.01
usw.
3.End Log = Logging.old.99

Gruß
MyMeyer
Mitglied: 75823
75823 Apr 16, 2009 at 19:53:09 (UTC)
Goto Top
haben die Logst unterschiedliche Changetime? Wie ich schon früher sagte : Die Ergebnis von "ls -lct log/" wurde hilfreich.

Hier ist ein Skript auf schnelle Hand. Hoffe ich wird dir helfen

#!/bin/bash
log_dir="dein_log_ordner"  
dist_dir="tmp_ordenr"  

for i in $( ls $log_dir/ | grep old); do
   file_date=$( stat --printf=%y $log_dir/$i | cut -d'.' -f1 | tr " " "_" | tr ":" "-" );  
   cp $log_dir/$i $dist_dir/$file_date.log
done;
Member: mymeyer
mymeyer Apr 17, 2009 at 06:59:09 (UTC)
Goto Top
Hi,
hier die Ausgabe wie gewünscht mit "ls -lct log*". Aber die Uhrzeit verwundert mich jetzt. Warum ist die denn immer gleich bei .old Dateien ?


6459365 Apr 17 08:54 logging
10485700 Apr 17 08:33 logging.old.00
10485707 Apr 17 08:33 logging.old.01
10485698 Apr 17 08:33 logging.old.02
10485711 Apr 17 08:33 logging.old.34
10485750 Apr 17 08:33 logging.old.33
10485691 Apr 17 08:33 logging.old.29
10485187 Apr 17 08:33 logging.old.31

usw für restlichen Files.


Gruß
MyMeyer
Mitglied: 75823
Solution 75823 Apr 17, 2009, updated at Feb 25, 2015 at 08:18:38 (UTC)
Goto Top
Oh man! wie blöd muss man sein um so ein Programm zu schreiben.
Dann den Skript von godlie passt hier am besten. Vielleicht mit kleinen Änderungen.

#!/bin/sh 
dt=`date +%Y-%m-%d`
tar cvfj /zielordenr/$dt.log.tar.bz2 /log/logging.old*