Wie ersetze ich Leerzeichen in einem Dateinamen?


8

Ich habe es folgendermaßen versucht:

rename 'bla bla .txt' blabla.txt

Aber das funktioniert nicht. Wie lautet die richtige Syntax für diesen Fall?

Antworten:


15

Sie sollten nicht renamenur eine Datei umbenennen, sondern stattdessen mv(1) .

Um Whitepsace zu entkommen, stellen Sie ihm Folgendes voran \:

"Ubuntu One"Ubuntu\ One

Ihr Befehl wäre

mv bla\ bla.txt blabla.txt
  • Der Backslash sagt Bash, dass das nächste Zeichen etwas Besonderes ist, z. B. \afür 'Glocke', \für einen wörtlichen Raum und so weiter

    siehe man ascii(7) für mehr

Da Sie jetzt den richtigen Befehl verwenden mv, können Sie alternativ den Dateinamen angeben, wenn viele Leerzeichen vorhanden sind:

mv "bla    bla.txt" blabla.txt

(Dies wäre bla\ \ \ \ bla.txtin maskierter Form)

  • In Bash werden Zeichenfolgen in Anführungszeichen (einfache oder doppelte Anführungszeichen) als ein einziges Argument behandelt, während Zeichenfolgen in Anführungszeichen wie folgt in mehrere Argumente aufgeteilt werden:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    und mverwartet:

    • ["mv", "source", "destination", ]
  • Hinweis: Wenn Sie 'mv' und die ersten Zeichen des Dateinamens eingeben und drücken TAB, erhalten Sie die maskierte Version des Dateinamens, wodurch das Umbenennen schnell und einfach wird.


renamewird verwendet, um das Umbenennen von Dateien mithilfe eines regulären Ausdrucks stapelweise zu verarbeiten, wie im Beispiel auf der Manpage gezeigt :

rename 's/\.bak$//' *.bak

Zum Entfernen von .bak (am Ende der Zeichenfolge [$]) aus allen Dateien, die mit "* .bak" übereinstimmen.


danke, wie würde der Befehl aussehen, wenn der Ursprungsdateiname viele Leerzeichen enthält? Gibt es eine einfache Regex, damit Sie nicht jedem einzelnen Leerzeichen entkommen müssen?
NES

Die Antwort wurde aktualisiert, um viele Leerzeichen und einfache oder doppelte Anführungszeichen zu adressieren.
Stefano Palazzo

Es gibt einen Unterschied zwischen einfachen und doppelten Anführungszeichen, aber dieses Problem spielt keine Rolle. In diesem Artikel finden Sie die genauen Details
Stefano Palazzo

4

Umbenennen ist ein spezialisierter Befehl zum Umbenennen von Massen. Was wir normalerweise als "Umbenennen" bezeichnen, ist eigentlich ein "Verschieben" zu einem neuen Namen:

mv 'bla bla .txt' blabla.txt

Was ist der Unterschied zwischen dem Schreiben des Dateinamens in einfache und doppelte Anführungszeichen?
NES

4
Durch doppelte Anführungszeichen können Variablen erweitert und Prozesse ersetzt werden. Einfaches Zitieren nicht. A=bla ; mv "$A $A .txt" blabla.txtverschiebt bla bla .txt, A=bla ; mv '$A $A .txt' blabla.txtsucht aber nach einer Datei mit dem Namen "$ A $ A .txt". Beides funktioniert jedoch für Ihr Beispiel.
Frabjous

1
rename "s/\s//g" "bla bla.txt"

s ist der Befehl sed Substitute.

\ s ist für whiteSpace

Sie ersetzen durch nichts. Andernfalls wird die Ersatzzeichenfolge nach dem zweiten Schrägstrich verwendet.

g steht für Global, dh ersetzt jede Instanz. Das Weglassen von g ersetzt nur die erste Instanz.


Dieser Befehl ersetzt Leerzeichen in allen Dateien durch Unterstriche:

rename "s/\s/_/g" *
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.