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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как задать подмножество допустимых символов  (Прочитано 776 раз)

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

Оффлайн red_sam

  • Автор темы
  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Здравствуйте.
Давно использую скрипт замены пробелов в имени файлов.
[spoiler]#!/bin/sh

_rrename () {
$number=1
    cd "$1" # идем в нужный каталог
    ls -1 | while read f # получаем список файлов
    do
echo "$f"
        _f=`echo $f | sed 's/ /_/g'` # новое имя для текущего файла
        /bin/mv -nT "$f" "$_f" 2>/dev/null # переименовываем (но вообще, лучше внимательн$
echo "$_f"
        if [ -d "$_f" ]; then # если каталог
            _rrename "./$_f" # повторяем для него данную функцию
            cd .. # и возвращаемся на уровень выше (обратно)
        fi
   done
}
_rrename $1
exit 0[/spoiler]

Но тут возникла необходимость "восстановить файлы" (подхватил заразу которая переименовала файлы в кракозябры).
И так... суть в том чтобы переименовывать файлы которые содержат кракозябры
строка 9  _f=`echo $f | sed 's/ /_/g'` И вопрос как заместо s/  написать not ([a-z] or [A-Z] or [А-Я] or [а-я] or [0-9]) на bash?

Оффлайн ende_neu

  • Старожил
  • *
  • Сообщений: 2473
    • Просмотр профиля
Нифига не понял.
^ - "всё, кроме указанного", т.е. [^0-9] - всё кроме цифр.Это интиресует что ли?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
not ([a-z] or [A-Z] or [А-Я] or [а-я] or [0-9])
LESS='-p Character Classes' man grep
[^[:alnum:]]

Оффлайн red_sam

  • Автор темы
  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
да. заменить все кроме цифр букв и точки. только что то у меня ничего не выходит

`¬│╝╠┬'.~ вот наглядный пример имени файлов. Windows когда такое видит зависает намертво. Linux видит но читать начинает только после переименования.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
red_sam, откройте для себя утилиту rename.
Она делает то же именами текущей директории, что sed c содержимым текущего файла.
Для примера
rename 's/ /_/g' *            # пробелы в именах файлах заменить на '_'
« Последнее редактирование: 01 Декабря 2011, 14:28:36 от alexander.pronin »

Оффлайн red_sam

  • Автор темы
  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
alexander.pronin спасибо. rename  упрощает жизнь
Но осталась одна проблемка - файлы чьи имена содержат "?" не переименовываются. забыл ошибку попозже напишу

 

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