2013-03-11 4 views
22

У меня есть сотни JPG-файлов в разных папках, как это:Удалить пробельные из имен файлов в 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

В принципе, мне нужно удалить ПРОСТРАНСТВА. Я уже знаю, команда изменение пространства в подчеркивание:

$ rename "s/ /_/g" * 

Но мне не нужно подчеркивание в этом случае. Мне просто нужно удалить пространство. Я пробовал следующее, но это не помогло:

$ rename "s/ //g" * 

Любая помощь была бы оценена.

ответ

20

Вы могли бы сделать что-то вроде этого:

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

Это работает !!! Большое спасибо! Можете ли вы объяснить, почему $ rename «s/// g» * не работал? –

+0

$ rename "s/// g" * работает нормально для меня. Возможно, в вашей среде есть что-то странное. Вы используете bash? – Blake

+0

Да, я использую bash. Должно быть, что-то странное в моей среде. –

32

Следующие действия будут работать в случае, если это действительно пространство.

$ rename "s/ //g" * 

Попробуйте

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

\s является символ пробела, принадлежащий к набору [ \t\r\n].

+1

Как вы знаете, если это действительно пробел? Для меня это выглядит как пространство. BTW, $ rename "s/\ s + // g" * тоже не работает. –

+1

@SamTimalsina Подстановка подчеркивания сработала для вас, но пространство не будет? Это кажется очень маловероятным. –

+0

Да. Это не сработало. Я загрузил файлы с Dropbox. Я уже потерял, как 2 часа на этом. –