2016-04-25 4 views
1

Linux bash, Centos.Linux: как добавить суффикс в файлы, поддерживающие расширение

Как добавить суффикс в файлы, поддерживающие расширение? Я мог найти ответ о том, как изменить или добавить расширение на файлы, но не для того, как добавить суффикс, поддерживающий расширение ...

Например: Если я хочу добавить суффикс '_thumb' ко всем файлам изображений (. jpg, .png, .gif, .JPEG) в некоторой директории.

somefile.jpg -> somefile_thumb.jpg

EDIT: Если это возможно сценарий может быть повторно запущен и не влияет на эти файлы, которые уже были переименованы. Чтобы добавить дополнительные расширения в список.

Заранее благодарен!

ответ

4

Вы можете использовать:

shopt -s nullglob 
for f in *.jpg *.png *.gif *.JPEG; do 
    [[ $f != *_thumb.* ]] && mv "$f" "${f%.*}_thumb.${f##*.}" 
done 
+0

Большое спасибо! Он работает. Но еще одно сомнение: если я хочу перезапустить скрипт и не хочу переименовывать те файлы, которые уже были переименованы раньше? (например, чтобы добавить дополнительные расширения) – MikeBau

+0

Проверьте обновленный ответ. В следующий раз он пропустит переименование одинаковых файлов. – anubhava

+1

Отлично, спасибо. Я думаю, что теперь более полно. – MikeBau

1

В небольшом изменении, вы можете принудительно удаление только расширение найденную с:

mv "$file" "${file%.${file##*.}}_thumb.${file##*.}" 
0

«переименовать» команда, вероятно, что вы ищете :

rename 's/^(.*)\.(png|jpg|gif|JPEG)$/$1_thumbnail.$2/' *.png *.jpg *.gif *.JPEG 

для объяснения:

  • первого аргумента в кавычках означает замену: «s/регулярное выражение-что-на-поиск/замена строка /»
  • это регулярное выражение соответствует каждому имени файла, которое начинается от случайной строки и заканчивается точкой, приложенной одним из перечисленных расширений
  • элементы регулярных выражений, заключенные в круглые скобки, будут хранить согласованную подстроку в переменных типа $ 1 и $ 2, которые используются в заменяющей строке.
  • * .png * .jpg * .gif * .JPEG - это только список файлов, звездочки расширяются оболочкой до полного списка файлов. Вы можете использовать только одну звездочку там, если у вас есть только изображения в каталоге.
+0

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение. – CodeMouse92