2013-12-12 3 views
0

У меня есть последовательность графических файлов, которые выглядят так:Как я могу последовательно перенумеровать файлы?

image-149454.jpg 
image-149455.jpg 

У меня есть некоторые другие изображения, которые я хочу, чтобы добавить в конец последовательности, где она была прервана, но в настоящее время они пронумерованы от 0 (т.е. image-000000 - image-010000).

Что такое сценарий, который я мог бы использовать, чтобы переименовать эти новые изображения, начиная с определенного числа и продолжая, в этом случае 149456 и далее?

+1

«Вопросы просящих кода должны продемонстрировать минимальное понимание решаемой задачи , Включите попытки решения, почему они не работают и ожидаемые результаты. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) « –

ответ

0

Я бы попробовал что-то вроде этого. Вам просто нужно настроить смещение и добавить строку перед именем, как вам нужно.

x=1 
for i in *.jpg; do 
    temp=$(printf "%08d.jpg" ${x}) #padding since you seem to want it 
    mv ${i} ${temp} 
    let x=x+1 
done 
0

Это непроверенное решение в Python. Это должно изменить все файлы в каталоге, чтобы иметь более высокие номера, чем другие.

Чтобы использовать его, введите: script.py dir1 dir2

Предполагая, что исходные файлы имеют более высокое число (149455) в dir1 и новые файлы начинаются с 000000 в dir2:

import os, sys, re 

max_image = 0 
# check if current (with higher numbers) and other (with lower) directory is given 
if len(sys.argv) == 3: 
    for files in os.listdir(sys.argv[1]): # first dir is current 
     if files.endswith(".jpg"): 
      #for all jpgs get the max 
      m = re.search("\-(\d+)", files) 
      number = int(m.group(1)) 
      if max_image < number: 
       max_image = number 

    for files in os.listdir(sys.argv[2]): # second dir is other 
     if files.endswith(".jpg"): 
      #get current start point 
      m = re.search("\-(\d+)", files) 
      number = int(m.group(1)) 
      os.rename(files, "image-" + str(number + max_image)+".jpg") # add the max from current folder 
+0

им нужно попробовать, но я никогда раньше не использовал python - просто чтобы быть четким, где вы отметили [1] и [2], я должен поместить пути в соответствующие каталоги? относительные или абсолютные пути? – user3079080

+0

Я думаю, что либо должен работать – Sash

+0

Я получаю недопустимый синтаксис в строке 6 «if»? – user3079080

0

Вот чистый Баш решение, которое использует последнюю последовательность изображений в качестве отправной точки (по вашему запросу):

#!/bin/bash 
last_seq=$(ls image-* | tail -1 | sort -n | cut -c7-) # grab the sequence number 
last_seq=${last_seq%.jpg} # remove the trailing .jpg 
if [ -z $last_seq ] ; then 
    echo "Unable to obtain the last image sequence number" 
    exit 1 
fi 
for image in image-0*.jpg ; do 
    [ -f ${image} ] || break # In case no files match image-0*.jpg 
    let last_seq=last_seq+1 
    mv -v ${image} image-$(printf "%06d.jpg" ${last_seq}) 
done 

Вот как он работал на местном уровне:

до запуска:

~/tmp › ls -l 
total 80 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:20 image-00000.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:20 image-01000.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14908.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14909.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14910.jpg 
-rw-r--r-- 1 dyoung staff 418 Dec 12 10:24 testh.sh 

во время бега:

~/tmp › sh ./testh.sh 
image-00000.jpg -> image-14911.jpg 
image-01000.jpg -> image-14912.jpg 

после запуска:

~/tmp › ls -l 
total 80 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14908.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14909.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:05 image-14910.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:20 image-14911.jpg 
-rw-r--r-- 1 dyoung staff  0 Dec 12 10:20 image-14912.jpg 
-rw-r--r-- 1 dyoung staff 429 Dec 12 12:25 testh.sh 
+0

Я получаю «неспособность получить последний порядковый номер изображения»? Существуют ли переменные здесь, которые я должен заполнять? он выглядел полностью – user3079080

+0

как есть, его нужно запустить из каталога, в котором находятся ваши файлы изображений, и предполагает, что они соответствуют именам файлов 'image- *' в соответствии с вашим исходным сообщением. Я проверил это локально, и я t работает здесь. – Donovan

+0

Я предполагаю, что я немного смущен тем, как указать вторую половину в нужное место (где имена файлов будут изменены) в коде, который он говорит для изображения в image-0 * .jpg, который, похоже, будет выглядеть в тот же каталог, в котором работает last_seq, из которого не работает? – user3079080

Смежные вопросы