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


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

Автор Тема: [Решено] Не работает скрипт bash. Верхний регистр в именах файлов  (Прочитано 1635 раз)

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

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Здравствуйте. Нашел такую штуку: A="abcdef abcdef abcdef";
for i in $A; do B=`echo -n "${i:0:1}" | tr "[:lower:]" "[:upper:]"`; echo -n "${B}${i:1} "; done
. Попытался переделать для своих целей.
(Нажмите, чтобы показать/скрыть)
Но что-то не срослось. В верхний регистр переводится только первый символ если добавляю IFS=
, либо все первые символы становятся заглавными, но пробелов нет.
P.S. Этот код довольно, монструозен ибо в bash  не особо силен)

Пользователь решил продолжить мысль 22 Сентября 2010, 13:26:36:
P.P.S. На файлах испытывать побоялся и вывод идет в терминал.
« Последнее редактирование: 22 Сентября 2010, 16:14:19 от CitiЯen »

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Мы сегодня с ArcFi вас вспоминали. Вот его вариант:
ls | while read ; do mv "$REPLY" "$(echo $REPLY | sed -r 's/(^.| .)/\U&/g')" ; done
А вот мой:
#!/bin/bash

IFS=$'\n' #разделитель устанавливается Enter
for i in `ls`
do

start_name=`echo $i | sed 's/\.[a-zA-Z]*$//'` #Получаем имя файла без расширения
expansion=`echo $i | sed 's/^.*\.\([a-zA-Z]\)/\1/'` #Получаем расширение файла без имени

new_name=`echo`
old_name=`echo`

IFS=$' ' #разделитель устанавливается Space


for j in $start_name #Дробим имя на слова
do
new_name=`echo $j | sed "s/^\(.\)/\u\1/"`
old_name=`echo "$old_name $new_name"`
done
old_name=`echo $old_name | sed 's/^[ t]*//'` #появлялись лишние пробелы в начале имени, но мы их удалили
mv "$i" "$old_name.$expansion" #переименовываем файлы

done
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Мы сегодня с ArcFi вас вспоминали. Вот его вариант:
ls | while read ; do mv "$REPLY" "$(echo $REPLY | sed -r 's/(^.| .)/\U&/g')" ; done
rename 's/(.*)(\.[^.]*)$/\U$1\E$2/g' *

А вообще, какая задача стоит я так и не понял...

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Сохраню оба варианта в академических интересах)) Спасибо Вам за помощь))

Пользователь решил продолжить мысль 22 Сентября 2010, 16:10:47:
Стояла задача по преобразованию имен файлов в дирректории т.о., чтобы из этого ываыв - выа вавыаю получить Ываыв  Выа Вавыаю
« Последнее редактирование: 22 Сентября 2010, 16:10:47 от CitiЯen »

 

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