LINUX.ORG.RU

Я почти не знаю bash, простой скрипт, нужна подсказка зрелых зубров -)


0

0

Есть куча файлов вида file1.doc, file2.doc ... file10.doc ... file55.doc и т. д. Нужно их привести к виду 01file.doc, ... 10file.doc и т. д., то есть вычленить цифры и привести их к одинаковой значности, добавив в начало каждой цифры нулей в количестве максимального количества знаков в списке минус количество знаков в данном числе элемента списка.

Как это реализовать средствами командной строки (bash)?

Понимаю что гугль рулит и есть множество отличных пособий, и я даже стараюсь их читать :-) Просто надо срочно, и я пока решения своими скудными силами, увы, не разумею...

Буду благодарен за помощь!

anonymous

смотреть в сторону seq (генерация последовательностей чисел), printf, for, ls и wc.

что-то вроде (не проверял):

COUNT=`ls -1 | wc -l`
for x in `seq -w 1 $COUNT`
do
  mv file`printf '%d' $x`.doc $xfile.doc
done

Begemoth ★★★★★
()

rename 's/(\w+?)(\d+)/$2$1/' *.doc

Нулями дополнять влом, надо найти разрядность самого большого числа.

Если были файлы
    file1.doc     file134.doc   file12345.doc 
и надо получить
    00001file.doc 00134file.doc 12345file.doc

A если надо просто перенумеровать в 
    1file.doc     2file.doc     3file.doc ,

то подойдет пример из предыдущего поста, ошибки только исправить.

sdio ★★★★★
()

n=`ls *.doc|grep -o -E '[0-9]+'|sort -n|wc -L`

ls *.doc | cut -d '.' -f1 | awk '{split($0,a,"file"); b=sprintf ("%.'$n'dfile.doc", a[2]); print "mv "$1".doc "b}' | $SHELL

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