LINUX.ORG.RU

перенумеровать фото


0

0

Нужно список фото в каталоге перенумеровать по порядку в стиле

0000.jpg
0001.ipg
....


помогите доделать команду, чтобы дописывались нули

list=`ls *.jpg`
i=0
for name in $list ; do
echo "$i --- $name"
(( ++i ))
done

позже echo заменю на mv

0 --- im_2763.jpg
1 --- im_2788.jpg
2 --- im_2791.jpg


if (i < 10)
    echo "000$i"
else if (i < 100)
    echo "00$i"

a3
()

counter=0
for i in *.jpg; do
mv $i $(printf "%04d" $counter).jpg
((counter++))
done


Ключевой момент: man 1 printf

Slavaz ★★★★★
()

а чем готовые инструменты не устраивают? Я гуевым krename пользуюсь, там такое одним мизинцем делается. Плюс оно умеет брать инфу из метаданных (exif, id3) и многое другое :)

nu11 ★★★★★
()

#!/bin/bash

set -u
set -e

zeros=4
nstart=1
nstep=1
script=$(basename "$0")
action='no'

usage()
{
    cat <<USAGE
Usage: $script [options] file1 [ file2, ... ]

Options (defaults are in brackets):
    -s <number>      Starting number ($nstart)
    -i <number>      Increment number ($nstep)
    -z <number>      Additional number of leading zeros ($zeros)
    -A               Do the real job (actually move files)
    -h, -?           This help message

Example:
    $script -A -z 4 -s 1 -i 1 0027-1.pbm 0027-2.pbm
    will move this files to: 0001.pbm 0002.pbm

USAGE
exit 0

}

while getopts s:i:z:Ah? opt; do
    case $opt in
        s) nstart=$OPTARG;;
        i) nstep=$OPTARG;;
        z) zeros=$OPTARG;;
        A) action='yes';;
        *) usage;;
    esac
done
shift $(expr  $OPTIND - 1)

fformat="%0${zeros}.0f"
n=$nstart

for f in "$@"; do
    new=$(printf "$fformat" $n)
    ext=$(echo "$f" | grep -o '\.\w*$') || ext=''
    if [ "$action" == 'yes' ]; then
        mv "$f" "${new}${ext}"
    else
        echo "mv \"$f\" ${new}${ext}"
    fi
    ((n += nstep))
done

exit 0

ip1981 ☆☆
()
Ответ на: комментарий от Slavaz

Симпл, симпл... Особенно когда кучу книжек распознаёшь, разбиваешь двустраничные страницы на одиночные, и делаешь djvu

ip1981 ☆☆
()
Ответ на: комментарий от xydo

> ls | perl -ne 'chomp;rename($_,sprintf("%04d",$i++));'

а теперь сделаем из него второй однострочник

AITap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.