2013-03-11 15 views
22

ich Hunderte von jpg-Dateien in verschiedenen Ordnern wie diese:Leerzeichen aus Dateinamen in Linux entfernen

  • 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

Grundsätzlich muss ich die RAUM entfernen. Ich weiß schon, den Befehl, die Räume in Unterstrichen zu ändern:

$ rename "s/ /_/g" * 

Aber ich brauche nicht die Unterstrichen in diesem Fall. Ich muss nur den Platz entfernen. Ich habe Folgendes versucht, aber es hat nicht funktioniert:

$ rename "s/ //g" * 

Jede Hilfe wäre willkommen.

Antwort

20

Man könnte so etwas tun:

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

Das funktioniert !!! Vielen Dank! Kannst du erklären, warum $ rename "s/// g" * nicht funktionierte? –

+0

$ rename "s/// g" * funktioniert OK für mich. Vielleicht gibt es etwas Seltsames mit deiner Umgebung. Benutzt du Bash? – Blake

+0

Ja, ich benutze bash. Muss etwas seltsam mit meiner Umgebung sein. –

32

Folgendes würde funktionieren, falls es wirklich ein Leerzeichen wäre. Versuchen

$ rename "s/ //g" * 

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

\s ein Leerzeichen ist, das zu der Gruppe von [ \t\r\n].

+1

Wie Sie wissen, ob es wirklich ein Leerzeichen ist? Für mich sieht es wie ein Raum aus. Übrigens, $ rename "s/\ s + // g" * hat auch nicht funktioniert. –

+1

@SamTimalsina Die Unterstreichung Substitution funktionierte für Sie, aber der Raum wird nicht? Das scheint sehr unwahrscheinlich. –

+0

Ja. Es hat nicht funktioniert. Ich habe die Dateien von Dropbox heruntergeladen. Ich habe schon 2 Stunden verloren. –