Entfliehen Sie dem Raum, z. Spring\ 2011
, oder verwenden Sie Anführungszeichen, z. 'Spring 2011'
. In Zukunft ist es normalerweise eine schlechte Idee, Dateinamen mit Leerzeichen auf allen *NIX.
Wenn Sie rename
haben , können Sie dies verwenden:
rename ' ' '_' [filenames...]
Wenn Ihr Rechner über den Umbenennungsbefehl verfügt, werden alle Leerzeichen in allen Dateien/Verzeichnissen im aktuellen Arbeitsverzeichnis in Unterstriche geändert:
rename 's/ /_/g' *
Wenn Sie rename
nicht haben oder ziehen Sie es vor, nur die Shell zu verwenden:
for f in *\ *; do mv "$f" "${f// /_}"; done
Aufgeschlüsselt:
*\ *
wählt alle Dateien mit einem Leerzeichen im Namen als Eingabe für denfor
aus Schleife. Das Muster*X*
wählt alle Dateien mitX
aus in ihrem Namen und für das Sonderzeichen-Leerzeichen müssen wir es mit einem Schrägstrich maskieren, damit Bash es nicht als Trennung verschiedener Argumente behandelt.- Die Anführungszeichen um
"$f"
sind wichtig, weil wir wissen, dass der Dateiname ein Leerzeichen enthält und es sonst als 2+ Argumente fürmv
erscheinen würde . ${f//str/new_str}
ist eine Bash-spezifische String-Ersetzungsfunktion. Alle Instanzen vonstr
werden durchnew_str
ersetzt .