LINUX.ORG.RU

Скрипт для переименования пачки файлов.

 ,


1

1

Выручайте! Я в bash не силен, поэтому прошу помощи.

Есть папка с 1500 файлами которые имеют имена в форме:

2013-05-27.06-45-14.000001.jpg

2013-05-27.06-45-34.000002.jpg

2013-05-27.06-45-43.000003.jpg

...

2013-05-27.10-52-02.001459.jpg

Нужно поменять имена всем этим файлам прибавив к последним числам 100, то есть должно получится файлы вида:

2013-05-27.06-45-14.000101.jpg

2013-05-27.06-45-34.000102.jpg

2013-05-27.06-45-43.000103.jpg

...

2013-05-27.10-52-02.001559.jpg

Заранее благодарен.

Ваша задача поставлена оскорбительно.
В таком виде - в job.
А если хотите помощи - скажите что вы уже сделали, что читали, и что не получается. Без труда.. в прочем, думаю. идея понятна.

Spirit_of_Stallman ★★★
()

Есть perl-rename. это скрипт на перле как раз для таких случаев. Есть почти в каждом дистре. Работает как то так :

perl-rename  's/*.000*.jpg/*.001*.jpg/' *.jpg

насчет прибавить 100 - тож как то можно запилить регулярку.

ubiquitine
()
Ответ на: комментарий от Spirit_of_Stallman

Ваша задача поставлена оскорбительно.

eddie -l -m{Data.List.Split,Text.Printf} 'intercalate "." . reverse . (\(x:y:xs) -> x : (printf "%06d" . (+100) . read) y : xs) . reverse . splitOn "."'

(здесь бы lens пригодились)

// TC-у

Выручайте! Я в bash не силен

Ну.. используй то, в чем силен.

anonymous
()
$ touch 2013-05-27.06-45-14.00000{1,2,3,111,222,333}.jpg
$ mkdir renamed
$ for f in *.jpg; do mv $f renamed/$(echo $f | awk 'BEGIN { FS=OFS="." } { $3 = sprintf("%0.6d", $3+100); print }'); done
$ ls renamed/
2013-05-27.06-45-14.000101.jpg  2013-05-27.06-45-14.000211.jpg
2013-05-27.06-45-14.000102.jpg  2013-05-27.06-45-14.000322.jpg
2013-05-27.06-45-14.000103.jpg  2013-05-27.06-45-14.000433.jpg
unterwulf
()

с этим справится даже гуёвый переименовывальщик

Jaga ★★★
()
Ответ на: комментарий от ubiquitine

Можно проще:

Хотел бы «проще», взял бы awk, только "-F. -v OFS=. '{ ... } 1'"

... /e'

Спасибо, буду иметь ввиду.

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

Команда правильна, сложно разве распарсить?, а вход у него кривой:

touch 2013-05-27.06-45-14.00000{1,2,3,111,222,333}.jpg

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

Так яснее (с учётом замечания anonymous-а)?

$ touch 2013-05-27.06-45-14.000{001,002,003,111,222,333}.jpg
$ ls -1
2013-05-27.06-45-14.000001.jpg
2013-05-27.06-45-14.000002.jpg
2013-05-27.06-45-14.000003.jpg
2013-05-27.06-45-14.000111.jpg
2013-05-27.06-45-14.000222.jpg
2013-05-27.06-45-14.000333.jpg
$ mkdir renamed
$ for f in *.jpg; do mv $f renamed/$(echo $f | awk 'BEGIN { FS=OFS="." } { $3 = sprintf("%0.6d", $3+100); print }'); done
$ ls -1 renamed/
2013-05-27.06-45-14.000101.jpg
2013-05-27.06-45-14.000102.jpg
2013-05-27.06-45-14.000103.jpg
2013-05-27.06-45-14.000211.jpg
2013-05-27.06-45-14.000322.jpg
2013-05-27.06-45-14.000433.jpg
unterwulf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.