2015-01-29 3 views
0

Я собираюсь получить 1000+ файлов, которые нужно будет переименовать, чтобы имена содержали их размеры печати. Я выяснил, как извлечь размеры пикселей и переименовать файлы, чтобы включить это с помощью exiftool, но я не уверен, что лучший подход для автоматизации расчета пикселей в дюймах и последующего переименования.Имя файла содержит размеры пикселей, которые необходимо преобразовать в дюймы

Это то, что делает ExifTool:

exiftool '-filename<%f_h${ImageHeight}w${ImageWidth}r${XResolution}.${FileType}' 

Так оригинальное имя файла 466001004_cc.jpg получает переименовано в 466001004_cc_h5280w4080r120.jpg и теперь мне нужно разделить 5280 и 4080 на 120, чтобы получить значение в дюймах.

В конечном счете, имя файла должно выглядеть следующим образом: 466001004_cc_044x034.jpg

Любая помощь будет принята с благодарностью, спасибо!

+0

Всегда ли 120? –

+0

К сожалению, значения высоты, ширины и разрешения для каждого файла различны. – Sam

+0

Коэффициент преобразования «точек на дюйм», который вам нужен, к сожалению, специфичен для устройства (камера, сканер, монитор, принтер ...), поэтому без ссылки на конкретное устройство, которое захватило изображение или отобразило его, преобразование в дюймы довольно бессмысленно ... – twalberg

ответ

1
# file looks like: 466001004_cc_h5280w4080r120.jpg 
for file in *; do 
    read basename w h <<< $(echo $file | awk -F_h '{print $1 " " $2}' | awk -Fr '{print $1}' | awk -Fw '{print $1 " " $2}') 
    w=$(echo "$w 120/p" | dc) 
    h=$(echo "$h 120/p" | dc) 
    mv $file ${basename}_${w}x${h}.jpg 
done 

Я предполагаю, что только _h в имени файла был вставлен вами. Если это часть базового имени файла, мой скрипт сломается.

Я также предполагаю, что в имени файла нет пробелов (будет разбита команда «для») и что не так много файлов, длина которых длиннее, чем Bash.

Легкий тест:

for file in *; do echo $file; done 

... если он сбрасывает все ваши имена файлов правильно, вы хорошо. С тонны файлов, вам нужно будет заменить на что-то вроде

find . -name "*.jpg" | while read file; do 
    file=$(basename $file) 

... на самом деле, это довольно просто исправить. Остальная часть скрипта осталась бы неизменной.

+0

Большое спасибо! Я собираюсь сделать это, как только вернусь в свой офис. И да, я вставил w, h и r, чтобы указать значения ширины, высоты и разрешения, их можно легко удалить. Пробел - тоже не проблема, но это зависит от моих ограниченных возможностей! – Sam

+0

Если OP использует 'bash', вы можете делать деление, не прибегая к' dc' ... 'w = 600; ((Х = ш/120)); echo $ x; 5' –

+0

Спасибо! Решение Майка отлично работало, но я тоже сделаю это. – Sam