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?

NES
quelle

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.

Stefano Palazzo
quelle
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
ændrük
quelle
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" *
Nissim Nanach
quelle