Допустим, у меня есть куча фотографий, все с правильной информацией EXIF, и фотографии названы случайным образом (из-за проблемы, с которой я столкнулся). У меня есть небольшая программа под названием, jhead
которая дает мне следующий вывод:
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Теперь мне нужно переименовать все фотографии в папке в следующем формате:
001.JPG
002.JPG
003.JPG
...
Где младший номер будет старым изображением, а максимальный - новым.
Я не очень хороший сценарий, поэтому я прошу помощи.
Я думаю, что достаточно bash-скрипта, но если вам удобнее, вы можете написать скрипт на python.
Я думал что-то вроде:
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
но я не знаю, как сделать это для всех файлов одновременно.
ls *.JPG | wc > rename
И тогда мне придется использовать скрипт переименования в XXX.JPGwc
, я забыл тот, чтобы заказать по имени.Ответы:
Вы можете использовать его для всех файлов, используя цикл for (в shell / в shell-скрипте):
Это просто очень общий план. Удалить,
echo
когда вы убедились, что все работает, как ожидалось.источник
File date : 2011:02:03 20:25:09
. Как я могу отфильтровать только второй столбец?j=`jhead "$i" | grep date | sed 's/.* //'`.jpg
вместо?'
до `` .jpg`Только что узнал здесь , что jhead может сделать все это для вас! :)
источник
%i
(или%03i
, в частности) даст порядковый номер в соответствии с запросом в исходном вопросе. Объединение обоих не может быть плохой идеей.Если кому-то нужно более сложное переименование, например, чтобы включить ключевые значения воздействия в имя файла, вот мой маленький скрипт. Он переименовывает файлы в формате JPEG на что - то вроде этого:
NightSky_2014.08.27_22.30.05_NX20_F2.8_f20.0mm_20s_ISO800.jpg
.источник
Мне понравился код, опубликованный maxschlepzig, но, тем не менее, возникли трудности с выводом.
Проблема заключалась в пробелах в результирующем имени файла (между строкой даты и строкой времени). Хотя это и тривиально для любого, кто использует графический интерфейс, это несколько усложняет обработку файлов в командной строке.
Здесь команда «sed» была существенно изменена на четыре отдельных операции «sed» в пользу предыдущего монолитного аргумента. Для себя, следующий также изменяет файл на нормальные 644 разрешения.
источник
sed
очень хорошо понимаю , поэтому я в основном понимаю, что вы пытаетесь сделать. Но наша цель в Stack Exchange - не раздавать бутерброды с рыбой или писать тысячи разовых решений для тривиально разных вопросов; Наша цель - научить людей ловить рыбу (то есть научить людей, в том числе нынешнего спрашивающего и будущих читателей, решать свои проблемы). С этой целью ваш ответ будет лучше, если вы объясните, что вы пытаетесь. (Пожалуйста, не отвечайте в комментариях; отредактируйте свой ответ, чтобы сделать его более понятным.)… (Продолжение)Поскольку (имхо) легче иметь дело, я написал себе скрипт на Ruby:
Что это делает?
Перебирает все файлы, передаваемые как параметры (например
*.JPG
).Я проверил, что он обрабатывает RAW файлы и видео правильно. Это должно работать со всем, с чем
exiftool
можно иметь дело.Ничего не делает, если файл
exiftool
сообщает об ошибке, илиЭто делает его довольно надежным. В частности, никакие файлы не могут исчезнуть (тихо), как в случае с некоторыми другими ответами.
источник
exiv2
будет альтернативой для манипулирования, которая допускает очень простой синтаксис:Так что это переименует все JPEG в текущей папке:
Если вы также хотите добавить географическую информацию, вы можете использовать
exivtool
:источник
Мне нравится решение @ Kevin, поскольку я также хотел сохранить исходное имя (избегая проблем с изображениями, снятыми в одну секунду), вот мое решение:
источник
Первая публикация новичка ... Первый скрипт bash ... Мне понравилось решение Libor / HalosGhost выше, так как оно включало больше деталей в переименование. Но после тестирования повторяющиеся имена файлов в конечном итоге теряют файлы. Поэтому я добавил метку счетчика в конец имени файла для удобства ссылок и предотвращения столкновений. Я уверен, что кто-то здесь может улучшить это, но подумал, что это может помочь.
Мои извинения выкладываю код. У меня проблемы с интерфейсом, но если бы кто-то мог указать мне на правильный путь, это было бы здорово.
источник