Dick.Guertins Antwort [1] schlug vor, dass man die Leerzeichen in einem Dateinamen entkommen könnte, was eine wertvolle Alternative zu anderen hier vorgeschlagenen Lösungen ist (z. B. die Verwendung eines Nullzeichens als Trennzeichen anstelle von Leerzeichen). Aber es könnte einfacher sein - Sie brauchen wirklich kein eindeutiges Zeichen. Sie können einfach sed die maskierten Leerzeichen direkt hinzufügen:
ls | grep ' ' | sed 's| |\\ |g' | xargs ...
Darüber hinaus ist das grep nur notwendig, wenn Sie nur Dateien mit Leerzeichen in den Namen möchten. Allgemeiner (z. B. bei der Verarbeitung einer Gruppe von Dateien, von denen einige Leerzeichen enthalten, andere nicht), überspringen Sie einfach das grep:
ls | sed 's| |\\ |g' | xargs ...
Dann kann der Dateiname natürlich auch anderes Leerzeichen als Leerzeichen enthalten (z. B. ein Tabulatorzeichen):
ls | sed -r 's|[[:blank:]]|\\\1|g' | xargs ...
Dies setzt voraus, dass Sie ein sed haben, das -r (erweiterte Regex) unterstützt, wie z. B. GNU sed oder aktuelle Versionen von bsd sed (z. B. FreeBSD, das die Option "-E" ursprünglich vor FreeBSD 8 buchstabierte und mindestens bis FreeBSD 11 sowohl -r als auch -E für die Kompatibilität unterstützt). Andernfalls können Sie eine reguläre Regex-Zeichenklasse in eckigen Klammern verwenden und die Leerzeichen und Tabulatoren manuell in den []
Grenzen eingeben.
[1] Dies wäre vielleicht eher als Kommentar oder als Bearbeitung dieser Antwort geeignet, aber im Moment habe ich nicht genug Reputation, um zu kommentieren, und kann nur Bearbeitungen vorschlagen. Da die letzten Formen oben (ohne das grep) das Verhalten von Dick.Guertins originaler Antwort ändern, ist eine direkte Bearbeitung vielleicht sowieso nicht angemessen.