PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuste Dateien kopieren



karlchen63
19-07-2005, 06:42
Moin Leute,

ich habe zufällig dieses Forum entdeckt und auch gleich eine Lösung für mein Problem gefunden. Allerdings finde ich, es müsste auch eleganter gehen.

Aber nun von vorn,
ich möchte ein Script erstellen, welches mir aus einer vielzahl von Dateien, nur die 10 neusten Dateien übrig läßt und die anderen löscht.

Meine Lösung sieht wie folgt aus:
#!/bin/bash

#######################
# Dieses Script verschiebt die 10 neusten Dateien in ein extra Verzeichnis
# /backup/tmp/ , loescht alle Dateien aus dem Verzeichnis /backup/
# und verschiebt die zehn neusten Dateien wieder in das Verzeichnis /backup/
#
#######################

# Temp-Verzeichnis erstellen,
# wenn es noch nicht existiert
if [ ! -d "/backup/tmp/" ] ; then
mkdir /backup/tmp/
exit 1
fi

# absolute Pfadangabe
cd /backup/

# Anzeige der 10 neusten Dateien
NEWEST=$(ls $(find . -maxdepth 1 -type f) --sort=time | head -n 10 )

# Verschieben der Dateien
mv $NEWEST /backup/tmp/
rm /backup/*.*

# Zurueckschieben der Dateien
mv /backup/tmp/*.* /backup/
rm -r /backup/tmp/
######## Ende ########

Gibt es eine elegantere Lösung?

Gruß karlchen

peschmae
22-07-2005, 20:35
Statt mit head
NEWEST=$(ls $(find . -maxdepth 1 -type f) --sort=time | head -n 10 )
arbeitest du besser mit tail:
NEWEST=$(ls $(find . -maxdepth 1 -type f) --sort=time | tail -n +10 )

MfG Peschmä

karlchen63
25-07-2005, 06:49
Moin Peschmä,

Danke für deinen Hinweis, leider verstehe ich nicht warum tail besser sein soll. Kannst du mich bitte aufklären?

Gruß karlchen

peschmae
25-07-2005, 10:57
Achso. Argl, ich habe ganz vergessen zu schreiben was die Konsequenzen sind da hast du Recht.

Tail ist nicht grundsätzlich besser als head oder so.

Tail so aufgerufen wie oben macht genau das umgekehrte. Statt die Dateien anzuzeigen die nicht gelöscht werden sollen bleiben die übrig die gelöscht werden sollen.
d.h. du kannst dir das Theater mit


mv $NEWEST /backup/tmp/
rm /backup/*.*

# Zurueckschieben der Dateien
mv /backup/tmp/*.* /backup/
rm -r /backup/tmp/

sparen und einfach rm $NEWEST ausführen.

MfG Peschmä

P.S. falls du 10 Dateien nicht löschen willst muss es allerdings tail +11 sein und nicht tail +10 wie oben von mir geschrieben - d.h. tail +11 gibt alle Zeilen ab der 11. aus oder anders gesagt die ersten 10 nicht

undefined
25-07-2005, 13:38
Warum verwendet ihr kein atime btw. ctime ?

NEWEST=$(ls $(find . -maxdepth 1 -ctime -2 -type f) --sort=time | tail -n 10 )

karlchen63
27-07-2005, 14:05
Hi Peschmä,

danke für deine Hilfe, genau so etwas habe ich gesucht, so dass ich mir das Zwischenspeichern sparen kann. :)


@ undefined
grundsätzlich ist eine Lösung mit ctime / atime auch möglich. Mir kommt es aber darauf an, auf jeden Fall die letzten 10 Dateien zu behalten (weil Backup) sonst stehe ich im schlimmsten Fall vor einem leeren Verzeichnis, weil auch die letzte Datei nach n Tagen gelöscht wird.

Aber danke für deinen Hinweis, jetzt weiß ich endlich wozu atime, ctime und mtime dienen.

Gruß karlchen