Risposte:
Non dovresti usare renameper rinominare solo un file, usa invece mv(1) .
Inoltre, per sfuggire a Whitepsace, aggiungilo come prefisso \:
"Ubuntu One" → Ubuntu\ One
Il tuo comando sarebbe
mv bla\ bla.txt blabla.txt
la barra rovesciata dice a bash che il personaggio successivo è in qualche modo speciale, ad esempio \aper "campana", \per uno spazio letterale e così via
vedi man ascii(7) per di più
In alternativa, poiché ora stai usando il comando corretto mv, puoi citare il nome del file se ci sono molti spazi:
mv "bla bla.txt" blabla.txt
(Questo sarebbe bla\ \ \ \ bla.txtin forma di escape)
In bash, le stringhe tra virgolette (virgolette singole o doppie) vengono trattate come un singolo argomento, mentre le stringhe non quotate verranno suddivise in più argomenti, in questo modo:
["mv", "bla", "bla.txt", "blabla.txt", ]e si mvaspetta:
["mv", "source", "destination", ]Nota: digitando 'mv' e i primi caratteri del nome file e premendo si TABotterrà la versione con escape del nome del file, rendendo la ridenominazione semplice e veloce.
renameviene utilizzato per elaborare in batch la ridenominazione dei file utilizzando l'espressione regolare, come dimostrato nell'esempio dalla sua pagina man :
rename 's/\.bak$//' *.bak
Per eliminare qualsiasi occorrenza di .bak (alla fine della stringa [$]) da tutti i file corrispondenti a "* .bak".
rename è un comando specializzato per rinominare in blocco. Inavvertitamente, ciò che normalmente chiamiamo "ridenominazione" è in realtà una "mossa" con un nuovo nome:
mv 'bla bla .txt' blabla.txt
A=bla ; mv "$A $A .txt" blabla.txtsposterà bla bla .txt, ma A=bla ; mv '$A $A .txt' blabla.txtcercherà un file chiamato "$ A $ A .txt". O uno funzionerà per il tuo esempio però.
rename "s/\s//g" "bla bla.txt"
s è il comando sostituto sed.
\ s è per whiteSpace
Stai sostituendo con niente. Altrimenti la stringa di sostituzione va dopo la seconda barra.
g è per Global, ovvero sostituisce ogni istanza. L'omissione di g sostituisce solo la prima istanza.
Questo comando sostituirà gli spazi bianchi con trattino basso in tutti i file:
rename "s/\s/_/g" *