Добавьте расширение файла в файлы с помощью bash

Каков хороший способ добавить расширение файла ".jpg" к файлам без расширения с помощью bash?

Ответ 1

for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done

Ответ 2

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

rename 's/(.*)/$1.jpg/' *

Ответ 3

Другой способ - без циклов

find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep  'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg

Структура:

  • найти все файлы без расширения
  • проверить тип файла
  • Отфильтровать только файлы JPG
  • удалить информацию о файле
  • xargs запускает "mv" для каждого файла

приведенная выше команда предназначена для сухого хода, после нее вы должны удалить "эхо" перед mv

Ответ 4

Простой, cd в каталог, где находятся ваши файлы:

for f in *;do mv $f $f.jpg;done

Ответ 5

сухой пробег:

 rename -n s/$/.jpg/ *

фактическое переименование:

 rename s/$/.jpg/ *

Ответ 6

find . | while read FILE; do if [ $(file --mime-type -b "$FILE") == "image/jpeg" ]; then mv "$FILE" "$FILE".jpg; fi; done;

Ответ 7

for f in *.jpg; do mv "$f" "${f%.jpg}.jpg"; done

Это похоже на ответ Сета Робертсона, но избегает переименования файлов без расширения .jpg.

Ответ 8

rename --dry-run * -a ".jpg" # test  
* -a ".jpg" # rename

Ответ 9

Райан Ли

Правильный синтаксис добавления расширения файла к нескольким файлам в каталоге, у которого нет расширения файла,

find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then  mv "$FILE" "$FILE".eml; fi; done;