Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: "Олимпиадная" задачка на bash  (Прочитано 727 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ubuntoidfromrussia

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
"Олимпиадная" задачка на bash
« : 26 Сентября 2012, 22:37:57 »
Не думал что наступит тот момент, когда я не смогу найти хотя бы намеки на решение в Google. Но очень простая с виду задача поставила меня в тупик. Причем не только меня - никто из моих знакомых, также, не смог её решить.

Итак условие:

Есть каталог, в котором много файлов. Все названия файлов имеют формат: xxxxx-yyyyy-zzz.vvv.www 

  Значениями могут быть как цифры, так и буквы. Их количество в каждом блоке (блоки отделяются друг от друга дефисами или точками) не органичено. Задача - написать на bash скрипт, который переименует все файлы к виду: zzz.vvv.www - то есть удалит в названиях файлов всё, что левее знака после последнего дефиса (включая и сам этот дефис).

Любой человек решает  эту задачу за долю секунды, а вот составить алгоритм на bash почему-то ни у кого (из тех кому я её показывал) пока не получилось.

 8)

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12141
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: "Олимпиадная" задачка на bash
« Ответ #1 : 26 Сентября 2012, 22:47:02 »
man sed
man mv
man xarg

И золотой ключик - у нас в кармане  ;)
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ubuntoidfromrussia

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: \"Олимпиадная\" задачка на bash
« Ответ #2 : 26 Сентября 2012, 22:49:04 »
А Вы попробуйте  :)

Пользователь решил продолжить мысль 27 Сентября 2012, 01:48:24:
нда

ls|while read i; do mv "$i" "${i/*-/}"  ; done

блин
« Последнее редактирование: 27 Сентября 2012, 01:48:24 от ihtimir »

andrey_p

  • Гость
Re: "Олимпиадная" задачка на bash
« Ответ #3 : 27 Сентября 2012, 05:40:32 »
man bash

Лучше

sudo apt-get install bash-doc
info bash

Набросок:

for f in *; do
  mv $f ${f##*-}
done

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: "Олимпиадная" задачка на bash
« Ответ #4 : 27 Сентября 2012, 09:00:42 »
Не bash, но одной командой:
prename 's/.*-(.*)/$1/' *

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: "Олимпиадная" задачка на bash
« Ответ #5 : 27 Сентября 2012, 09:14:24 »
Еще вариант
cd mydir;rename 's/([0-9a-zA-Z]*-)*//g' *
PS. Чуть проще
cd mydir;rename 's/(.*-)*//g' *
Можно, наверное, и без g.
« Последнее редактирование: 27 Сентября 2012, 10:04:18 от alexander.pronin »

 

Страница сгенерирована за 0.029 секунд. Запросов: 26.