LINUX.ORG.RU

Учи перл, уже не первый вопрос по этой теме.

prename -n 's/^([^.]+)/\U$1/' AbsDE.txt
AbsDE.txt renamed as ABSDE.txt

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

Спасибо,вы очень мне помогли!

Dean
() автор топика
Ответ на: комментарий от salsa

Не стандарт потому что. Я не видел системы без perl, а без zsh каждая первая.

Аллегория: Можно и раскладку qwerty заменить на дворак, но вот ты не дома и ты опять набираешь одним пальцем, глядя на клавиатуру.

anonymous
()

Аноны и неаноны, советующие решение — у вас лужа запузырилась.

Расширение файла, это либо пустая строка, либо кусок имени после последней точки. Имя файла легко может быть таким: fOo.bAR.baZz.txt

«картинка печать переделывай»

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Сынок, «Расширение файла» — нет такого понятия в *nix. Имя файла — это просто имя, в крайнем случае, для удобства пассажиров части отделенные точками можно назвать суффиксами.

Так что гуляй умник, от тебя уж точно лужи пузырятся.

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

Ко-ко-ко, да и только.

Чтобы корректно решить поставленную ТС задачу нужно найти последний сепаратор — точку, а их может быть одна и более (таки .bashrc, foo.txt, access.1.log). И в приведенных мной примерах видно, что необходимо еще и убедиться в наличии той части имени файла, которую требуется изменить.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Не кукарекай напрасно. ТС пометил задачу как решенную. Было бы надо искать последний суффикс, нашли бы и сделали. То что ты решил в закрытой теме выпендриться тебя не красит

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

Даже таких базовых понятий до сих пор нет в этом вашем *nix.

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

Не стандарт потому что. Я не видел системы без perl, а без zsh каждая первая.

Всегда есть варианты.

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

Мля, твой prename нихрена не умеет лукахеад, ну или у меня он такой, что не умеет. Мне удалось победить только чтобы он не ругался на отсутствие капчуров. Кароч, ну нахер эти регулярки вместе с перлами и башами:

#include <stdio.h>
#include <string.h>


int
main(const int argc, char **const argv)
{
    int len, pos, dot = -1;

    if (argc != 2) {
        printf("GTFO!\n");
    } else {

        len = strlen(argv[1]);
        pos = len;
        while (pos > 0) {
            pos--;
            if (argv[1][pos] == '.') {
                dot = pos;
                break;
            }
        }
        if (dot > 0) {
            len = dot;
        }
        for (pos = 0; pos < len; pos++) {
            if (argv[1][pos] > 96 && argv[1][pos] < 123) {
                argv[1][pos] -= 32;
            }
        }

    }
    printf("%s\n", argv[1]);

    return 0;
}

deep-purple ★★★★★
()
Ответ на: комментарий от Tanger
$ prename -n 's/^(.*)$/\U$1/' Привет.txt
Привет.txt renamed as Привет.TXT

Те же яйцы.

deep-purple ★★★★★
()
Ответ на: комментарий от Tanger

UPD: В таком случае я даже на богомерзом пхп запилю с поддержкой многобайтных, но у ТС в тегах (было) bash и linux. И что ему такое предложить было?

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

но у ТС в тегах (было) bash и linux.

OLDNAME='Привет.txt'
NEWNAME=$(echo $OLDNAME | sed -r 's/^(.*)$/\U\1/')

echo "$NEWNAME"

ПРИВЕТ.TXT

regex доработать по вкусу.

А ты таки слил, со своим говнокодом на С
anonymous
()
Ответ на: комментарий от anonymous

regex доработать по вкусу

Ну вот когда доработаешь — тогда и кудахтай что я что-то там слил. А пока это полуработающий пример.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

тебе не хватает?

.fail more-fail

Это очень простые случаи. Проверить на отсутствие точки. И проверить на единственную точку в начале.

Что еще? file.tar.gz.txt — поменять все кроме txt ? Легко sed -r 's/^(.*)(\.[^.]*)$/\U\1\E\2/'

Кукуретик, сделай тоже самое на С (c UTF-8) посмеемся над кол-вом кода и багов, а также как это исходный код запускать из bash

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