rm < liste

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von fencingline, 21.04.2007.

  1. #1 fencingline, 21.04.2007
    fencingline

    fencingline Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe eine Liste (Liste.txt) mit beispielsweise folgendem Inhalt:

    Datei1.txt
    Datei2.txt
    Datei3.txt

    usw.

    Die in dieser Datei aufgelisteten Dateien sollen gelöscht werden, also eigentlich folgender Befehl:

    rm < Liste.txt

    Leider funktioniert das so nicht. Gibt es eine solche Möglichkeit?

    Hier noch einmal der Inhalt des Verzeichnis:

    Datei1.txt
    Datei2.txt
    Datei3.txt
    Liste.txt

    In der Datei Liste.txt stehen obige Zeilen.

    Vielen Dank für alle Tipps und Hinweise!

    Sascha
     
  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 madfool, 21.04.2007
    Zuletzt bearbeitet: 21.04.2007
    madfool

    madfool Tripel-As

    Dabei seit:
    12.08.2004
    Beiträge:
    192
    Zustimmungen:
    0
    Code:
    #!/bin/bash
    
    while file
    do
       if [ -e $file ]
       then
          rm $file
       fi
    done < Liste.txt
    
    Gruß
    D.
     
  4. #3 fencingline, 21.04.2007
    fencingline

    fencingline Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Hallo,

    vielen Dank für das Script!

    Leider bekomme ich beim Aufruf einen Fehler:

    usage: file [-c] [-f ffile] [-m mfile] [-h] file...

    Shell ist ksh

    Was kann hier noch falsch sein?

    VG

    Sascha
     
  5. #4 Wolfgang, 21.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Weil file eine Anwendung ist, und du wahrscheinlich eher das willst:

    Code:
    #!/bin/sh
    
    while read file
    do
       if [ -e $file ]
       then
          rm $file
       fi
    done < Liste.txt
    
    Gruß Wolfgang
     
  6. #5 fencingline, 21.04.2007
    fencingline

    fencingline Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Hallo Wolfgang,

    leider erzeugt auch diese Variante einen Fehler.

    ./script[5]: test: argument expected
    ./script[5]: test: argument expected
    ./script[5]: test: argument expected

    Was kann das noch sein?

    VG

    Sascha
     
  7. #6 Wolfgang, 21.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Lass mich wetten, du hast Leerzeichen in den Dateinamen oder Leerzeilen in der Datei.
    Lösung:
    Quote die Variable. "$file"
     
  8. #7 fencingline, 21.04.2007
    fencingline

    fencingline Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Funktioniert auch nicht, selber Fehler. :(

    In den Dateianhängen habe ich alles gescreenshottet.
     

    Anhänge:

  9. #8 Wolfgang, 21.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Was passiert wenn du das als Pipe machst?

    Code:
    cat Liste.txt|while read datei;
    do
    echo "$datei wird getestet";
    if [ -e "$datei" ];
    then
    echo "loesche "$datei";
    else
    echo "Datei nicht gefunden ->$datei"
    fi
    done
    
    Habe hier keine ksh zum testen, aber sollte eigentlich gehen.


    Gruß Wolfgang
     
  10. #9 fencingline, 22.04.2007
    fencingline

    fencingline Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Hallo Wolfgang,

    leider funktioniert auch diese Variante nicht (siehe Dateianhang).

    Viele Grüße

    Sascha
     

    Anhänge:

  11. #10 Wolfgang, 22.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ok,.dann ist Eigeninitiative gefragt.
    Schau dir deine Manpage zu test an, und ersetze den Testparameter durch den für dein ksh zutreffenden.
    Wie ich schon sagte, kann ich nicht mit ksh dienen.
    Zumal nichtmal klar ist, welche Version und auf welchem OS das läuft.

    Du wirst das schon schaffen.
    Gruß Wolfgang
    PS Bitte verwende in Zukunft Code-Tags statt Bilder.
     
  12. #11 Karlhans, 22.04.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    Eventuell stehe ich auf dem Schlauch, aber so wuerde ich es tun:

    Code:
    #!/bin/sh
    for i in $(cat Liste.txt); do
    rm $i ;
    done
    
     
  13. #12 Wolfgang, 22.04.2007
    Zuletzt bearbeitet: 22.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Das ist schon richtig, nur der Test ob es die Datei überhaupt gibt fehlt.
    Offensichtlich hat die verwendete ksh-Version (welche auch immer das ist) eine andere Syntax auf eine exisierende Datei zu testen.

    Dirty und brutal mit rm -f geht das schon. ;)
    Aber es soll ja auch ein Lerneffekt dabei sein, wie es richtig geht.

    Gruß Wolfgang
    PS Habe nun doc h mal die Arbeit des OT gemacht, und das hier gefunden:
    http://www.context-switch.com/reference/kshref/ch4.html

    Wenn es die richtige Version ist, dann muss einfach das e durch ein a ersetzt werden.
     
  14. dpkg

    dpkg Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    Linz
    Bei mir gehts, wenn ich statt #!/bin/ksh #!/usr/bin/ksh schreibe.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Karlhans, 22.04.2007
    Karlhans

    Karlhans Jungspund

    Dabei seit:
    22.04.2007
    Beiträge:
    16
    Zustimmungen:
    0
    Das ginge doch auch mit "test"

    Code:
    if test -f "$i" then rm $i fi
    
     
  17. #15 Wolfgang, 22.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    [ ist ein Alias auf test.
    Aber unter bash ist
    -e FILE = File exist
    Unter einigen ksh-versionen
    -a FILE = File exist

    Das war hier das Problem.

    Normalerweise gehe ich davon aus, dass Fragende bei Lösungsvorschlägen nachsehen was das macht, statt blind darauflos copy-paste anzuwenden.
    Dann wäre das nämlich klar gewesen, dass es unter ksh offensichtlich keine Option -e bei test gibt.


    Wolfgang
     
Thema:

rm < liste

Die Seite wird geladen...

rm < liste - Ähnliche Themen

  1. Hundertserver sucht Dich: Linux Spezialisten in Berlin.

    Hundertserver sucht Dich: Linux Spezialisten in Berlin.: Hundertserver sucht einen Linuxspezialiten in Berlin Hundertserver über sich: "Hundertserver bietet Unternehmen die Möglichkeit, digitale...
  2. Frankreich erneuert seine Referenzliste zu freier Software

    Frankreich erneuert seine Referenzliste zu freier Software: Frankreich hat die Ausgabe für 2016 von SILL, der Referenzliste zu freier Software zur Verwendung in französischen Amtsstuben herausgegeben....
  3. Rogue Wave übernimmt PHP-Spezialisten Zend

    Rogue Wave übernimmt PHP-Spezialisten Zend: Der PHP-Spezialist Zend Technologies wurde durch Rogue Wave aufgekauft. Mit der Übernahme will sich der US-Cross-Plattform-Hersteller verstärkt in...
  4. Checkliste für Beschaffung von Open Source Software in der Schweiz vorgestellt

    Checkliste für Beschaffung von Open Source Software in der Schweiz vorgestellt: Die Schweizerische Informatikkonferenz (SIK) hat eine 15 Punkte umfassende Liste vorgelegt, die das IT-Beschaffungswesen der Eidgenossen bei der...
  5. Liste mischen. Alternativen zu sort -R

    Liste mischen. Alternativen zu sort -R: Hallo, ich möchte eine Liste mit Einträgen kontrolliert und einigermaßen gut "mischen". Die Liste wird 100-9000 Einträge haben. Später möchte...