Bash: Dateien finden und leeren

Post Reply
Message
Author
jochenz
Posts: 3
Joined: 13. Apr 2004 12:11
Location: Brandenburg

Bash: Dateien finden und leeren

#1 Post by jochenz »

Hallo.

Habe ein Problem mit einem kleinem Script zur Sicherung von Dateien. Als erstes werden aus dem Ordner (orginale) die zu suchenden Dateien in einen zweiten Ordner (Sicherung) kopiert. Dann werden die orginalen Dateien umbenannt (das Datum wird am Dateinamen angehängt). Bis hier hin klappt alles ohne Probleme. Und nun sollen die orginalen Dateien auch noch geleert werden, aber irgendwie gelingt es mir nicht in Verbindung mit dem Befehl >find< . Wer kann mir bei meiner Problematik einen Tipp geben. Oder hat eventuell jemand einen anderen Lösungsansatz. Hier das bisherige Script.

#!/bin/bash
# finde im Verzeicniss Scans/orginale alle dateien älter 3 Tage und kopiere diese
# mit Pfadangabe ins Verzeichniss /Scans/sicherung/
find /Scans/orginale/ -name '*' -mtime +3 -exec cp -a --parents {} /Scans/sicherung/ \;

# kopiere aus dem Verzeichnis /Scans/sicherung/Scans/orginale/ den gesamten
# Inhalt ins verzeichnis /Scans/sicherung/
cp -R -a /Scans/sicherung/Scans/orginale/* /Scans/sicherung/

# lösche den Ordner Scans, im Verzeichnis /Scans/sicherung/
rm -r /Scans/sicherung/Scans/

# jetzt sind alle dateien älter 3 Tage, aus dem Ordner Orginale, im Ordner
# sicherung --- inkl. Verzeichnisbaum und Dateiattribute

############################Ende Sicherung#################################

# Eine Variable Daum wird gesetzt
DATUM=$(date +'%d_%m_%Y')

# finde im Verzeicniss Scans/orginale alle dateien älter 3 Tage und fuege
# an den Dateinamen das Datum an
find /Scans/orginale/ -name '*' -mtime +3 -exec mv {} {}.$DATUM \;

###########################Ende Umbenennen#################################

# finde im Verzeicniss Scans/orginale alle dateien älter 3 Tage und leere diese
find /Scans/orginale/ -name *.$DATUM -mtime +3 -exec > {} \;
# ENDE


Der jetzige Befehl zum Leeren der Dateien, erzeugt eine leere Datei mit den Namen "{}" in dem Verzeichnis in dem ich das Script ausführe.
Setze ich diesen Befehl ein,
find /Scans/orginale/ -name *.$DATUM -mtime +3 -exec echo "x" > {} \;
dann erzeugt es mir wieder eine Datei mit den Namen "{}", in der so viele x'se stehen wie es Dateien gibt, die mit dem Suchmuster übereinstimmen.

Danke im Vorraus

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

Jochen

#2 Post by jochen »

Einfach ein "cp /dev/null {} \;" als Argument zum letzten -exec angeben, weil sonst die Original-Shell das ">" interpretiert, bevor find es in die Finger kriegt. Und ob find was damit anfangen kann, würde ich auch noch bezweifeln. Allerdings habe ich es jetzt nicht ausprobiert.

Die cp/rm-Kombi oben (2./3. Kommando) würde ich durch ein einziges mv erledigen.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

jochenz
Posts: 3
Joined: 13. Apr 2004 12:11
Location: Brandenburg

#3 Post by jochenz »

Danke, funktioniert wunderbar.

Post Reply