2013-03-11 18 views
22

Ho centinaia di file jpg in cartelle diverse in questo modo:Rimuovere gli spazi bianchi da nomi di file in Linux

  • 304775 105_01.jpg
  • 304775 105_03.jpg
  • 304775 105_05.jpg
  • 304775 105_07 .jpg
  • 304775 105_02.jpg
  • 304775 105_04.jpg
  • 304775 10 5_06.jpg

Fondamentalmente, ho bisogno di rimuovere gli SPAZI. So già il comando per cambiare gli spazi in underscore:

$ rename "s/ /_/g" * 

Ma non ho bisogno le sottolineature in questo caso. Ho solo bisogno di rimuovere lo spazio. Ho provato quanto segue, ma non ha funzionato:

$ rename "s/ //g" * 

Qualsiasi aiuto sarebbe apprezzato.

risposta

20

Si potrebbe fare qualcosa di simile:

IFS="\n" 
for file in *.jpg; 
do 
    mv "$file" "${file//[[:space:]]}" 
done 
+0

Funziona !!! Grazie mille! Puoi spiegare perché $ rename "s/// g" * non funzionava? –

+0

$ rinomina "s/// g" * funziona correttamente per me. Forse c'è qualcosa di strano nel tuo ambiente. Stai usando bash? – Blake

+0

Sì, sto usando bash. Deve essere qualcosa di strano con il mio ambiente. –

32

Quanto segue funzionerebbe nel caso in cui fosse davvero uno spazio.

$ rename "s/ //g" * 

Prova

$ rename "s/\s+//g" * 

\s è uno spazio bianco, appartenente all'insieme di [ \t\r\n].

+1

Come fai a sapere se è davvero un carattere di spazio? Per me sembra uno spazio. BTW, $ rinominare "s/\ s + // g" * non ha funzionato neanche. –

+1

@SamTimalsina La sostituzione di underscore ha funzionato per te, ma lo spazio no? Sembra molto improbabile. –

+0

Sì. Non ha funzionato. Ho scaricato i file da Dropbox. Ho già perso più di 2 ore su questo. –

Problemi correlati