LINUX.ORG.RU

> Есть несколько сотен файлов в формате .jpg,
И именами вида: ... ?

AITap ★★★★★
()

perl -e '/(.*)\.jpg$/ and rename «$1.jpg», sprintf «%03d», ++$i for <*.jpg>'

Может помочь. _Не_ применять, если в директории есть файлы с особо изощрёнными названиями.

anonymous
()
Ответ на: комментарий от anon_666

После запуска скрипта, в директории остаётся только один файл 00001.jpg.

cyberunknown
() автор топика

Как вариант (для bash):

tmpdir=$(mktemp -d -p $(pwd)); ((x=0)); for i in *.jpg; do mv «$i» $tmpdir/$(printf '%03d' $x).jpg; ((++x)); done; mv $tmpdir/* .; rmdir $tmpdir

Файлы перемещаются во временный каталог вместо переименования в текущем чтобы избежать затирания файлов, которые и так имеют имена данного формата, то есть например если где-нибудь в середине списка оказался бы 000.jpg, он был бы затёрт новым 000.jpg, но перемещая файлы в отдельный каталог мы этого избегаем простыми средствами, но можно конечно сделать и сложнее :-)

askh ★★★★
()
$ ls *.jpg | awk '{printf("mv %s %03d.jpg\n", $1, NR)}'
mv asd.jpg 001.jpg
mv qwe.jpg 002.jpg
mv zxc.jpg 003.jpg
sdio ★★★★★
()
#!/bin/sh
# this script wrote by Eddy 
#
#		batchrename - renames files like 01.ext, 02.ext ...
#
# Создан 17-го Июля 2003 года в 20:35
#   
#   format :  batchrename <list of files>
#        or:              -r <extension> <<list of files> or <dir>>
#   -r - recoursively
counter=0
extrec=""
if [ "$#" -lt "1" ]; then
    echo -e "\n\t\tUsage:\n\tbatchrename [opt]\nopt:"
    echo -e "-r <ext> <folder> (or file list) -- renames recoursively ALL files"
    echo -e "\tin folder <folder> (or by file list given)  with extension .<ext>"
    echo -e "<folder> -- renames ALL files in folder given"
    echo -e "<file list> -- renames ALL files of given filelist.\n\n"
    exit 0
fi
Name="$*"
if [ "$1" = "-r" ]; then
    extrec="$2"
    shift
    shift
    Name="$*"
    [ "$Name" = "" ] && Name="./"
fi
echo -e "\n\t\t\tRENAMING"

for file in $Name
do
file=`echo "$file" | sed "s/<>/ /g"`
    if [ -d "$file" ];then
	echo -e "\nDiving into \033[38m $file \033[39m"
	cd "$file"
	if [ "$extrec" != "" ]; then
	    batchrename -r $extrec `ls -1 | sed "s/\ /<>/g"`
	else
	    batchrename `ls -1 | sed "s/\ /<>/g"`	
	fi
	cd ../
	continue
    fi
    ext=`ext "$file"`
    if [ "$ext" = "ion" ]; then
	continue
    fi
    if [ "$extrec" = "" -o "$ext" = "$extrec" ];then
        counter=`expr $counter + 1`
	echo -e "Progress: $counter files\r\c"
        mv "$file" "rnmd$counter.$ext"
    fi
done
echo -e "\n\n\t\t\tENDING"
digits=`echo $counter|awk '{print length ($0)}'`
cnt=1
while [ $digits -gt $cnt ]
do
    f=`ls -S -1|grep "rnmd[0-9]\{$cnt\}\."`
    rename rnmd rnmd0 $f
    cnt=`expr $cnt + 1`
done
if [ "$counter" -gt "0" ]; then
    rename rnmd "" rnmd*
fi
echo -e "\n\t\t\tDone !!!\n"
Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.