Сынок, «Расширение файла» — нет такого понятия в *nix. Имя файла — это просто имя, в крайнем случае, для удобства пассажиров части отделенные точками можно назвать суффиксами.
Так что гуляй умник, от тебя уж точно лужи пузырятся.
Чтобы корректно решить поставленную ТС задачу нужно найти последний сепаратор — точку, а их может быть одна и более (таки .bashrc, foo.txt, access.1.log). И в приведенных мной примерах видно, что необходимо еще и убедиться в наличии той части имени файла, которую требуется изменить.
Не кукарекай напрасно. ТС пометил задачу как решенную. Было бы надо искать последний суффикс, нашли бы и сделали. То что ты решил в закрытой теме выпендриться тебя не красит
Мля, твой 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;
}