Auslesen / durchsuchen / überprüfen / löschen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ofcourse, 04.03.2011.

  1. #1 ofcourse, 04.03.2011
    ofcourse

    ofcourse Grünschnabel

    Dabei seit:
    03.03.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Für euch vermutlich eine Kleinigkeit, für mich ein grosses Stück Arbeit - als bekennender Newbie.

    Mein Ziel, ein Befehl für die Bash, die zuerst auf meinem Server das /home Verzeichnis auslesen soll. (Hier befinden sich ca. 30 User Ordner).
    Hier soll nun in jeden Ordner reingeschaut werden, ob es einen FTP-Ordner gibt.
    Wenn JA, sollen in diesem Ordner alle Dateien gelöscht werden, die älter als 4 Wochen sind.

    Ich hab mich nun schon durch das ein oder andere Tutorial gequält, aber die Erleuchtung will mir nicht recht kommen. :(
    Lösungsvorschläge und auch persönliche Tutorial-Empfehlungen sind gern gesehen!

    Thx,
    ofcourse
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gast123, 04.03.2011
    Gast123

    Gast123 Guest

    Ungetestet:
    Code:
    #! /bin/bash
    
    FTP_FOLDERS_LIST="/tmp/ftp-folders.tmp"
    OLD_FILES_LST="/tmp/old-ftp-files.tmp"
    
    find /home -iname ftp > $FTP_FOLDERS_LIST
    
    while read FOLDER; do
    	find "$FOLDER" -ctime 28 > $OLD_FILES_LIST
    	while read FILE; do
    		rm "$FILE"
    	done < $OLD_FILES_LIST
    done < $FTP_FOLDERS_LIST
    
    rm $FTP_FOLDERS_LIST
    rm $OLD_FILES_LIST
    
     
  4. #3 ofcourse, 04.03.2011
    ofcourse

    ofcourse Grünschnabel

    Dabei seit:
    03.03.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Vielen Dank!
    Ich versuch das mal zu interpretieren, um eben nach und nach mal mehr hinter die Logik zu kommen - wenn ich darf?
    Eine Korrektur der Interpretation wäre super!

    Code:
    FTP_FOLDERS_LIST="/tmp/ftp-folders.tmp"
    OLD_FILES_LST="/tmp/old-ftp-files.tmp"
    Hier verstehe ich, ich erstelle Variablen und gebe den Speicherort dafür an.

    Code:
    find /home -iname ftp > $FTP_FOLDERS_LIST
    Er sucht im home Verzeichnis nach Ordnern die "ftp" im Namen haben und befüllt damit die Variable. (was bewirkt das -i ?)

    Code:
    while read FOLDER; do
    	find "$FOLDER" -ctime 28 > $OLD_FILES_LIST
    	while read FILE; do
    		rm "$FILE"
    	done < $OLD_FILES_LIST
    done < $FTP_FOLDERS_LIST
    Hier komm ich ein wenig ins Straucheln.
    Solange er Ordner einliest, soll er die Variable Folder finden (?) und wenn die Zeit von 28 (woher weiß er das Tage gemeint sind?) rum sind, verschiebt er sie in die variable O_F_L ?

    Bei dem Abschnitt stolpere ich doch noch ordentlich :(

    Code:
    rm $FTP_FOLDERS_LIST
    rm $OLD_FILES_LIST
    Löschen der erstellten Liste oder Variable.
     
  5. #4 NoXqs, 04.03.2011
    Zuletzt bearbeitet: 04.03.2011
    NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Nicht ganz. Ich erstelle eine Variable mit dem Wert eines Dateinamens.
    Wann immer ich die Variable später verwende, wird somit die Datei benutzt.

    Er sucht Einträge im Directory mit genau dem Namen "ftp" (case-insensitive) und schreibt das Ergebnis in den Wert der Variablen $FTP_FLODERS_LIST (hier /tmp/ftp-folders.tmp.
    Die Schleife bekommt als Eingabe die gerade erstellte Datei. (die gefundenen Ordner namens ftp im $HOME.) Jeder Wert wird als $FOLDER weiterverarbeitet.
    Dann werden mit der find-Anweisung Dateien gesucht, die älter als 28 tage sind.
    Das ist im find-befehl so definiert. (siehe "man 1 find")
    Jeder Treffer wird in eine weitere Datei geschrieben, wie auch schon beim ersten find-Befehl. Dannach kommt die nächste Schleife, die die zu löschen Dateien einliest und auch löscht.

    Naja, eigentlich löschen der datei, aber da das script dann auch am Ende ist, sind die Variablen auch nicht mehr existent.

    Ein Verbesserungvorschlag wäre in dem ersten find-befehl direkt nur auf directories zu prüfen und im zweiten Ausdruck den find-Befehl nur files suchen zu lassen und direkt zu löschen.
    Das ist aber alles Geschmackssache, funktionieren sollte beides.
    Code:
    #! /bin/bash
    
    FTP_FOLDERS_LIST="/tmp/ftp-folders.tmp"
    
    find /home [b]-type d[/b] -iname ftp > $FTP_FOLDERS_LIST
    
    while read FOLDER; do
    	find "$FOLDER" [b]-type f[/b] -ctime 28 [b]-exec rm {} \;[/b]
    	done < $FTP_FOLDERS_LIST
    
    rm $FTP_FOLDERS_LIST
    
    Vielleicht sollte man auch noch über eine "-maxdepth 2" nachdenken, um nicht zu tief in den $HOMES zu suchen und event. zu löschen.
     
  6. #5 ofcourse, 04.03.2011
    ofcourse

    ofcourse Grünschnabel

    Dabei seit:
    03.03.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Vielen, vielen Dank für die Hilfe & Erklärungen!
     
  7. #6 ofcourse, 04.03.2011
    ofcourse

    ofcourse Grünschnabel

    Dabei seit:
    03.03.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Oh, eine kurze Frage noch.... "-exec rm {} \" <--- rm = löschen, und der Rest?
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Spezialausdruck für den find.
    "{} \;" --> Das Suchergebnis.
     
  10. #8 Gast123, 05.03.2011
    Gast123

    Gast123 Guest

    @Noxqs
    Deine Version ist natürlich viel schöner. :D
     
Thema:

Auslesen / durchsuchen / überprüfen / löschen

Die Seite wird geladen...

Auslesen / durchsuchen / überprüfen / löschen - Ähnliche Themen

  1. 2 Zeilen aus einer txt auslesen

    2 Zeilen aus einer txt auslesen: Hallo Leute, ich habe eine Datei die immer aus zwei zusammenhängenden Zeilen besteht, als Beispiel: DE0006231004 # 15,04 Infineon DE0005785604...
  2. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...
  3. Datei auslesen und fund per MAil versenden.

    Datei auslesen und fund per MAil versenden.: Hallo folgendes Script habe ich zur Zeit in Arbeit. Und zwar führe ich über "at" ein kleines Script aus was in einem Logfile nach bestimmten...
  4. Dateien auslesen und Daten systematisch angeordnet in Datei ausgeben

    Dateien auslesen und Daten systematisch angeordnet in Datei ausgeben: Guten Abend, ich hätte da mal eine Frage. Bin mir recht sicher, dass es in der Shell funktionieren sollte, aber kenne mich damit kaum aus....
  5. ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

    ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern: Hallo Leute, heute brauche ich mal einen dringenden Rat von Euch. Ich habe hier etwas mehr als 1200 PDF-Dateien (Text), die jeweils ein...