rm < liste

F

fencingline

Mitglied
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
 
Code:
#!/bin/bash

while file
do
   if [ -e $file ]
   then
      rm $file
   fi
done < Liste.txt

Gruß
D.
 
Zuletzt bearbeitet:
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
 
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
 
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
 
Hallo
Lass mich wetten, du hast Leerzeichen in den Dateinamen oder Leerzeilen in der Datei.
Lösung:
Quote die Variable. "$file"
 
Funktioniert auch nicht, selber Fehler. :(

In den Dateianhängen habe ich alles gescreenshottet.
 

Anhänge

  • Verzeichnisinhalt.gif
    Verzeichnisinhalt.gif
    2 KB · Aufrufe: 28
  • Script.gif
    Script.gif
    1,8 KB · Aufrufe: 27
  • Liste.txt.gif
    Liste.txt.gif
    1,2 KB · Aufrufe: 23
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
 
Hallo Wolfgang,

leider funktioniert auch diese Variante nicht (siehe Dateianhang).

Viele Grüße

Sascha
 

Anhänge

  • Ergebnis_Script2.gif
    Ergebnis_Script2.gif
    2,7 KB · Aufrufe: 14
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.
 
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
 
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

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.
 
Zuletzt bearbeitet:
Bei mir gehts, wenn ich statt #!/bin/ksh #!/usr/bin/ksh schreibe.
 
Das ginge doch auch mit "test"

Code:
if test -f "$i" then rm $i fi
 
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
 
Das wird schon im Vorprozess gesprüft, dass die zu löschenden Dateien auch da sind!

Ob Liste.txt selbst da ist, wird ebenfalls überprüft!

Danke noch mal an alle die geholfen haben! :-)
 
Das wird schon im Vorprozess gesprüft, dass die zu löschenden Dateien auch da sind!

Ob Liste.txt selbst da ist, wird ebenfalls überprüft!

Danke noch mal an alle die geholfen haben! :-)
Und wie prüfst du das im Vorprozess?

Doch nicht etwa mit if ...?

Immerhin hättest du ja dann die Option kennen müssen.

Ein Schelm wer ...
:devil:
Wolfgang
 
Hallo Wolfgang,

die Datei wird in einem Vorprozess erzeugt mit Dateien welche da sind -> ls > datei

Es könnte nur ein User die Datei per Hand löschen, aber das schließen wir mal aus. ;-)

Des Weiteren wusste ich nicht, dass "[" ein Alias für "test" ist. Hätte ich das gewusst, hätte ich auch die Manpage für "test" lesen können. Sorry dafür. :(

LG

Sascha
 

Ähnliche Themen

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Dateien auslesen und Daten systematisch angeordnet in Datei ausgeben

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Dateiname einer Befehlsausgabe als Variable festlegen

awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

Zurück
Oben