Каков хороший способ добавить расширение файла ".jpg" к файлам без расширения с помощью bash?
Добавьте расширение файла в файлы с помощью 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;