Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Leere ordner löschen/dateiname aus txtfile löschen

  1. #1
    Data Centre Technician Avatar von Svenny
    Registriert seit
    Dec 2002
    Ort
    Frankfurt/M
    Beiträge
    857

    Leere ordner löschen/dateiname aus txtfile löschen

    Hiho,
    folgendes.. Ich habe viele Ordner, einige sind leer, einige sind gefüllt, wie ich leere ordner finde weiß ich "find -empty -type d" und die löschen müsste ja mit -exec rm -rf $1 gehen. soweit sogut, nun hab ich aber eine textdatei in der die ordnernamen drinstehen und zusätzlich dahinter ein paar info in der selben zeile, wie könnte ich nun diese zeile für den zu löschenden ordner daraus löschenm ich bin der meinung irgendwie ging das mal per grep.

    schonmal danke für alle antworten im vorraus.
    Tweedle-dee-du

  2. #2
    @Debian Avatar von tictactux
    Registriert seit
    Oct 2004
    Beiträge
    2.872
    Zitat Zitat von Svenny
    Hiho,
    folgendes.. Ich habe viele Ordner, einige sind leer, einige sind gefüllt, wie ich leere ordner finde weiß ich "find -empty -type d" und die löschen müsste ja mit -exec rm -rf $1 gehen. soweit sogut, nun hab ich aber eine textdatei in der die ordnernamen drinstehen und zusätzlich dahinter ein paar info in der selben zeile, wie könnte ich nun diese zeile für den zu löschenden ordner daraus löschenm ich bin der meinung irgendwie ging das mal per grep.
    etwas mager das Pflichtenheft
    Wenn der Ordnername als absoluter Pfadname am Zeilenanfang der
    Textdatei steht, und nur Ordner im aktuellen Verzeichnis geprüft
    werden sollen, von der Logik (die Textdatei sei ../filelist):
    Code:
    #!/bin/sh
    cp -p ../filelist ../filelist.bak    # erstmal Backup
           # nun die einzelnen leeren Verzeichnisse, oberstes Level
    for x in $(find ./ -empty -type d -maxdepth 1); do
         case "$x" in
         ./GANZWICHTIG)    # das wollen wir nie löschen
             ;;
         *)     # alles andere wird gelöscht
                 # Listeninhalt OHNE aktuelles Verzeichnis zwischenspeichern
              egrep -v "^$x\>" ../filelist >>../filelist.new
              rm -ri "${x}"     # hier frag ich lieber mit -i nach
              mv ../filelist.new ../filelist   #das wird neue Liste für nächste Runde
              ;;
          esac
    done
    Das Muster von egrep kann angepaßt werden: ^ steht für Zeilenanfang,
    Wortanfang/-ende wären \< und \> u.s.w.
    Dieser Code ist ungetestet und soll nur die Logik einer
    möglichen Lösung zeigen. Also keinesfalls direkt verwenden!
    (mit rm -rf sollte man sich Zeit nehmen )

    Viel Spaß,
    Wolfgang

    EDIT: wichtigstes vergessen: 'egrep -v' bewirkt, daß nur nichtpassende
    Zeilen ausgegeben werden - dadurch taucht ein gelöschter Name
    in der neuen Liste nicht mehr auf.
    Geändert von tictactux (08.11.04 um 00:56 Uhr)

  3. #3
    Data Centre Technician Avatar von Svenny
    Registriert seit
    Dec 2002
    Ort
    Frankfurt/M
    Beiträge
    857
    Dank dir, sieht an sich gut aus, leider gibt mit das find den ordner immer als
    ./dirname aus und in dem file stehts halt nicht mit dem ./ drin.
    Tweedle-dee-du

  4. #4
    Registrierter Benutzer
    Registriert seit
    Jan 2003
    Beiträge
    2.325
    Füg einfach noch einen kleinen Filter ein:

    sed 's/\.///g'

  5. #5
    Data Centre Technician Avatar von Svenny
    Registriert seit
    Dec 2002
    Ort
    Frankfurt/M
    Beiträge
    857
    Zitat Zitat von sirmoloch
    Füg einfach noch einen kleinen Filter ein:

    sed 's/\.///g'
    wenn ich das mit | ans find mach gibt er mit
    sed: -e Ausdruck #1, Zeichen 7: unknown option to `s'

    aus
    Tweedle-dee-du

  6. #6
    @Debian Avatar von tictactux
    Registriert seit
    Oct 2004
    Beiträge
    2.872
    Zitat Zitat von Svenny
    Dank dir, sieht an sich gut aus, leider gibt mit das find den ordner immer als
    ./dirname aus und in dem file stehts halt nicht mit dem ./ drin.
    Dafür ist Variablen-Expansion der Shell da
    Vor die egrep-Zeile einfügen:
    Code:
    x=${x#./*}
    ist nicht so wild, wie's aussieht (entfernt ./ am Anfang)

    Gruss,
    Wolfgang

  7. #7
    @Debian Avatar von tictactux
    Registriert seit
    Oct 2004
    Beiträge
    2.872
    Zitat Zitat von Svenny
    wenn ich das mit | ans find mach gibt er mit
    sed: -e Ausdruck #1, Zeichen 7: unknown option to `s'

    aus
    der erste / müßte Escaped werden (also s/\.\///)

  8. #8
    Data Centre Technician Avatar von Svenny
    Registriert seit
    Dec 2002
    Ort
    Frankfurt/M
    Beiträge
    857
    Zitat Zitat von tictactux
    Dafür ist Variablen-Expansion der Shell da
    Vor die egrep-Zeile einfügen:
    Code:
    x=${x#./*}
    ist nicht so wild, wie's aussieht (entfernt ./ am Anfang)

    Gruss,
    Wolfgang
    na das geht schonmal, ist ja herrlich, hab nun nur noch n doofes space-problem, d.h. wenn ein ordner mit space dabei ist wird das space als newline interpretiert..

    mein bisheriger code:
    Code:
    for x in $(find ./ -empty -type d -maxdepth 1); do
            x=${x#./*}
            egrep -v "^$x\>" $ACCFILE >>./.tmp.out
            rm -rf "${x}"
            mv ./.tmp.out $ACCFILE
    done
    Geändert von Svenny (08.11.04 um 01:22 Uhr)
    Tweedle-dee-du

  9. #9
    @Debian Avatar von tictactux
    Registriert seit
    Oct 2004
    Beiträge
    2.872
    Zitat Zitat von Svenny
    na das geht schonmal, ist ja herrlich, hab nun nur noch n doofes space-problem, d.h. wenn ein ordner mit space dabei ist wird das space als newline interpretiert..
    hab ich schon kommen sehen

    Da kommt eine leicht erweiterte Version
    (ändert den Feld-Separator der Shell)
    (EDIT: vereinfacht: bei IFS NewLine statt TAB genommen)
    Code:
    #!/bin/sh
    cp -p ../filelist ../filelist.bak    # erstmal Backup
           # nun die einzelnen leeren Verzeichnisse, oberstes Level
    OLDIFS=$IFS
    IFS="
    "
    for x in $(find ./ -empty -type d -maxdepth 1); do
         case "${x}" in
         ./GANZWICHTIG)    # das wollen wir nie löschen
             ;;
         *)     # alles andere wird gelöscht
                 # Listeninhalt OHNE aktuelles Verzeichnis zwischenspeichern
              x=${x#./*}
              egrep -v "^${x}" ../filelist >../filelist.new
              rm -ri "${x}"     # hier frag ich lieber mit -i nach
              mv ../filelist.new ../filelist   #das wird neue Liste für nächste Runde
              ;;
          esac
    done
    IFS=$OLDIFS
    Auf ein Neues,
    Wolfgang
    Geändert von tictactux (08.11.04 um 02:03 Uhr)

Ähnliche Themen

  1. Dateien lassen sich nicht löschen aber Ordner.
    Von bullar im Forum Linux in heterogenen Netzen
    Antworten: 5
    Letzter Beitrag: 03.11.04, 22:24
  2. Ordner löschen, der auf andere Partition verlegt wurde (/var)
    Von anotherone im Forum System installieren und konfigurieren
    Antworten: 1
    Letzter Beitrag: 25.10.04, 10:28
  3. Problem mit KDE 3.2 Installation unter SuSE 9.0
    Von IceThunder im Forum System installieren und konfigurieren
    Antworten: 3
    Letzter Beitrag: 03.03.04, 17:27
  4. Ordner mit Inhalt Löschen
    Von Manta im Forum Linux in heterogenen Netzen
    Antworten: 10
    Letzter Beitrag: 27.06.03, 17:51
  5. Kann ich den Ordner Löschen?
    Von THE_LINUX_NEWBIE im Forum Linux Allgemein
    Antworten: 2
    Letzter Beitrag: 05.11.01, 15:42

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •