Самый легкий способ сделать это состоял бы в том, чтобы, вероятно, использовать хеши Perl:
perl -e '
for (<*.jpg>){
$date = substr($_,0,10);
$counts{$date}++;
rename $_ => "$date-".sprintf "%03d",$counts{$date}.".jpg";
}
'
Осторожный, тем не менее, этот код не тестируется. Попробуйте его на фиктивных файлах сначала.
Можно надеяться, что
convert in.jpg -resize "448x336!" out.jpg
не касается файла, если размер уже правильно?
Неучебно не - но думая о том, как работает формат imageMagic командной строки, что неудивительно.
Итак, измерения изображения каждого файла должны быть проверены в первую очередь.
Теперь мы хотим использовать ImageAmagic, которая имеет команду для этой цели
;
identify -format "%wx%h\n" file.jpg
показывает только размер в формате wxh
, как 448x336
.
Мы хотим изменять размер, если размер не 448x336
. В этом случае мы используем Convert
, чтобы изменить размер 448x336
- мы должны сообщить Convert
, что мы хотим изменять изменение изменений, даже если это означает изменение соотношения сторон в силу Изображение к новым габаритам - мы делаем это, добавив !
Как вариант / флаг в спецификации размера:
convert in.jpg -resize "448x336!" out.jpg
Размеры нам нужны. Но у нас нет фиксированного имени файла для вывода. Давайте возьмем исходное имя и вставьте -RES
-RES
до .jpg
.jpg . In-res.jpg
:
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
Используем команду
Проверять каталоги за « .jpg изображения - или" .jpg ".
Определите деталь
, выполняются в оболочке для использования команды
, [...]
.
Я также использую оболочку для команды Convert
, которая работает, если первая -Exec
действие (не вариант) вспомнил. В этом случае это только для того, чтобы запустить вторую команду после размера, показывая сообщение для каждого файла изменений.
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
Вместо второго Bash
, можно использовать простыню -Exec Convert ...
, и добавить новое действие, вроде -Print
или -Ls
, чтобы показать имена измененных файлов.
Команда является одной строкой технически (показана с линиями продолжения, чтобы избежать прокрутки).
И, после этого объяснения, как-то я чувствую, что линия все еще не легко читать ...
Файлы шириной 720 пикселей можно найти с помощью команды:
identify -format '%w %i\n' *.jpg | awk '/^720/ {print $2}'
Возможно использовать этот вариант, если файлов действительно много, что может привести к расширению *.jpg, чтобы выдать страшную ошибку "список аргументов слишком длинный":
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}'
С помощью этого списка можно изменить размер этих файлов, например:
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}' | xargs -I {} convert -resize 488x336! {} {}
Восклицательный знак ! после 488x336 заставляет новое изображение быть именно такого размера; без него сохраняется пропорции и заданный размер является максимальными размерами для ширины и высоты.