Ich möchte eine Liste von Dateien entfernen und um Bestätigung gebeten werden. Die Liste befindet sich in der list.txt
Datei. Warum funktioniert der folgende Befehl nicht richtig?
while read i; do rm -i $i; done < list.txt
Der vorherige Befehl wartet nicht auf mich, aber zum Glück wird keine Datei gelöscht.
Ich benutze Bash.
quelle
y
, wäre die vorherige Datei gelöscht worden?y
, sondern jeder Name, der mit ... beginnty
. Anscheinend wirdrm
nur das erste Zeichen der empfangenen Antwort betrachtet: 'y' ist ja, alles andere ist nein.Für etwas, das etwas ausgefallener ist, als Ja oder Nein auf jede Datei zu antworten, können Sie die Option
iselect
für die interaktive Auswahl auf der Basis von ncurses verwenden. z.Boder um die Auswahl von Dateien im aktuellen Verzeichnis zuzulassen:
Daraufhin wird eine auf Vollbildschirm (Vollterminal) basierende Auflistung angezeigt, in der Dateien durch Drücken der LEERTASTE nach Belieben ausgewählt und abgewählt werden können. Drücken Sie die EINGABETASTE, um Ihre Auswahl zu bestätigen (ausgewählte Einträge werden auf stdout gedruckt) oder um
q
zu beenden (nichts wird auf stdout gedruckt). Drücken Sieh
für Hilfe.Beachten Sie die
echo rm
- ich habe es zum Testen so geschrieben. Ändern Sie es,rm
sobald Sie sicher sind, dass Sie verstehen, was es tut.Beachten Sie auch,
xargs
dass hier\n
als Eingangstrennzeichen verwendet wird. Dies funktioniert nicht, wenn einer der Dateinamen Zeilenvorschubzeichen enthält. Imiselect
Übrigen funktioniert das auch nicht richtig - es erwartet ein Element pro Zeile - leideriselect
gibt es keine Option für nullterminierte Eingaben oder Ausgaben.iselect
ist für Debian, wahrscheinlich Ubuntu und andere Distributionen ebenfalls gepackt. Die Homepage befindet sich unter http://www.ossp.org/pkg/tool/iselect/quelle