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 denforaus Schleife. Das Muster*X*wählt alle Dateien mitXaus 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ürmverscheinen würde . ${f//str/new_str}ist eine Bash-spezifische String-Ersetzungsfunktion. Alle Instanzen vonstrwerden durchnew_strersetzt .