Bash Dateien löschen nach Liste

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
105
Hallöchen Leute.
Ich bin recht neu bei Linux. (Mint)
Ich wollte ein Script schreiben, wie es bei Windows schon lange funktionierte.
Ich kapiere aber nicht, was dort verkehrt läuft, obwohl ich schon Hilfen von etlichen Internetseiten kopiert hatte.
Das Script soll Dateien löschen, die zeilenweise in einer Textdatei eingetragen sind.
Es endet jedesmal nur mit der Ausgabe, dass die Dateien nicht vorhanden seien, weil am Ende immer '$'\r' am Ende hängt, die aber nicht in der Liste stehen.
Kann mir dort jemand helfen, was ich verkehrt mache?

#!/bin/bash
#
Liste=/media/RamDisk/FireFoxPortable/Data/exclude2.txt
for i in less $Liste;do rm "$i";done
read -p "Zum aufhalten des Terminalsfenster"
 

Anhänge

  • Bildschirmfoto_2025-06-08_11-12-18.png
    Bildschirmfoto_2025-06-08_11-12-18.png
    144,2 KB · Aufrufe: 94
Ich glaube nicht, dass es mit less funktionieren könnte.


Code:
Liste=/media/RamDisk/FireFoxPortable/Data/exclude2.txt
while IFS= read -r i; do
  rm "$i"
done < "$Liste"
 
Danke für die erste Antwort.
Direkt kopiert, aber exakt die selbe Ausgabe mit dem '$'\r' am Ende
 
Deine Datei enthält WIndows-Zeilenumbrüche (Wagenrücklauf und Zeilenvorschub, CR + LF, '\r\n').
Du musst den Wagenrücklauf entfernen. Außerdem bietet sich xargs an.

Code:
less $Liste | tr -d '\r' | xargs -n1 rm

HTH
xpad.c
 
Super - Das hat funktioniert!
Nur was ist daran falsch? Windows will ja alle Verzeichnisse mit \ und Linux mit / , was ich in der Liste verändert hatte und es gibt keine freien Zeilen unter den gelisteten Dateien
 

Anhänge

  • Bildschirmfoto_2025-06-08_11-54-19.png
    Bildschirmfoto_2025-06-08_11-54-19.png
    14,1 KB · Aufrufe: 80
In den Textdateien gibt es auch Steuerungssymbole, diese sind in der Regel unsichtbar.
Ein Zeilenumbruch bei Linux, Mac und Unix ist in der Regel nur "\n".
Windows verwendet für Zeilenumbruch "\n\r" und daran stören sich so einige Programme.
Manche Programme haben Abfragen und automatische Konvertierungen eingebaut, damit dass kein Problem ist, aber das haben halt nicht alle Programme.


Ich weiß nicht welcher Editor bei Cinnamon der Standard ist, daher kann ich dir nicht sagen,
wie man die Steuerungssymbole sichtbar macht.
 
Hm ok, dann weiß ich Bescheid. Dann schreibe ich die Listen nochmal komplett neu bei Linux.
Danke für eure Hilfe
👍
 
Text-Datei mit CRLF zu LF konvertieren geht mit dem Befehl dos2unix. Und in Zukunft am Besten immer mit LF arbeiten und den Editor entsprechend einstellen. Unix sagt ganz klar eine Zeile endet mit genau einem LF (\n). Etwaige andere unsichtbare Steuerzeichen gehören entsprechend zum Zeileninhalt, daher landen die CR (\r) in dem Dateinamen den du zu löschen versuchst.

Ferner gehört auch ein LF ans Ende der letzten Zeile (also nochmal Enter drücken nachdem du Text in die letzte Zeile geschrieben hast), denn LF beendet eine Zeile.

Wenn du im Terminal z.B. sowas siehst:
Code:
nutzer:host~ $ cat liste.txt
eins.jpg
zwei.jpg
drei.jpgnutzer:host~ $
Dann weil die letzte Zeile nicht mit einem Zeilenumbruch abgeschlossen wurde ;)
 
  • Gefällt mir
Reaktionen: GTrash81 und floq0r
  • Gefällt mir
Reaktionen: GTrash81 und Marco01_809
Zurück
Oben