Fuggi dallo spazio, ad es. Spring\ 2011
, o usa le virgolette, ad es. 'Spring 2011'
. In futuro, in genere è una cattiva idea utilizzare nomi di file con spazi su qualsiasi *NIX.
Se hai rename
, puoi utilizzare questo:
rename ' ' '_' [filenames...]
Se la tua macchina ha il comando rename, questo cambierà tutti gli spazi in caratteri di sottolineatura in tutti i file/dir nella directory di lavoro corrente:
rename 's/ /_/g' *
Se non hai rename
o preferisci usare solo la shell:
for f in *\ *; do mv "$f" "${f// /_}"; done
Ripartito:
*\ *
seleziona tutti i file con uno spazio nel nome come input per ilfor
ciclo continuo. Il modello*X*
seleziona tutti i file conX
nel loro nome, e per lo spazio dei caratteri speciali, dobbiamo farne l'escape con una barra in modo che bash non lo consideri come una separazione di argomenti diversi.- Le virgolette intorno a
"$f"
sono importanti perché sappiamo che c'è uno spazio nel nome del file e altrimenti apparirebbe come 2+ argomenti amv
. ${f//str/new_str}
è una funzione di sostituzione delle stringhe specifica di bash. Tutte le istanze distr
sono sostituiti connew_str
.