0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 25
1

Переименование файлов.

02.04.2012, 17:19. Показов 2503. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Есть задача: во всех подкаталогах указанного в качестве параметра каталога (и в нем самом) переименовать все файлы в верхний, либо нижний регистр. Регистр и каталог указываются в качестве параметра. Очевидно, что при автоматическом переименовании может возникнуть проблема пропажи тех файлов, которые содержали в себе одинаковые символы, однако регистровое их наполнение разнилось (proba, prOba, Proba,...). В этом случае необходимо запросить у пользователя новое имя для "нехороших" файлов. И еще момент: find использовать нельзя.
Вот, что имеется:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
!#bin/sh
if ( [ "X"$1 = "X" -o "X"$2 = "X" ] ) 
  then
    echo '\nНе указаны параметры запуска, используйте:\n-A для больших букв;\n-a для маленьких.\nВ качестве второго параметра используйте путь в каталог\n'
    exit 1
fi
cd $2 || exit 1
case $1 in
-a)
for i in `ls -A -R | awk '{ if ( substr($1, lenght($1), 1) == ":" ) print substr($1, 0, ( lenght($1) - 1 ) )}'`
  do  
     for j in `ls $i -lA | grep ^- | awk '{print $8}'`
       do
         if [ $j = ` echo $j | tr '[:upper:]' '[:lower:]'` ] 
           then
             continue
           else
             mv -f $i/$j $i/` echo $j | tr '[:upper:]' '[:lower:]'`
         fi
     done
done;;
-A)
for i in `ls -A -R | awk '{ if ( substr($1, lenght($1), 1) == ":" ) print substr($1, 0, ( lenght($1) - 1 ) )}'`
  do  
     for j in `ls $i -lA | grep ^- | awk '{print $8}'`
       do
         if [ $j = ` echo $j | tr '[:lower:]' '[:upper:]'` ] 
           then
             continue
           else
             mv -f $i/$j $i/` echo $j | tr '[:lower:]' '[:upper:]'`
         fi
     done
done;;
*)
exit 1
esac
Понимаю, что проблема идиотская, но от попыток придумать алгоритм перехвата "нехороших" файлов просто закипает мозг. Голову ломаю уже который день.
Вроде бы просто нужно жахнуть еще один цикл и искать файлы, которые вообще разнятся, но после переименования будут выглядеть одинаково. Пробую делать так, но выходит, что либо mv матерится, либо уже во второй итерации файл как бы переименован, однако счетчик на него все равно заскакивает. Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2012, 17:19
Ответы с готовыми решениями:

Переименование файлов
Доброй ночи. Задача: Есть каталог и несколько уровней подкаталогов, в "последнем" каталоге лежит...

Переименование файлов в цифры
Написал скрипт для замены имен файлов в каталоге на цифры 1,2,3 и т.д Не могу исправить один...

Групповое переименование файлов
Здравствуйте! Есть прозвольное множество файлов вида: № 444-П от 28.11.2014 О внесении...

Проверка имен файлов и переименование
Добрый день. Помогите решить задачу с помощью батфайла Есть структура из определенного...

5
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
03.04.2012, 02:17 2
надо сгенерить новое имя файла, а потом проверить его на существование, и если он есть, предложить ввести новое имя (цикл для повторного ввода имени, если и оно есть, можно дописать потом)

вообще, неясно, на какую глубину скрипт должен спускаться
0
0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 25
03.04.2012, 15:02  [ТС] 3
accept, это к примеру, вот так:
Bash
1
2
3
4
5
6
7
8
9
10
11
for k in `ls $i -lA | grep ^- | awk '{print $8}'`
...
if [ $j != $k -o ` echo $j | tr '[:upper:]' '[:lower:]'` =  ` echo $k | tr '[:upper:]' '[:lower:]'` ]
  then
    echo "Вы хотите переименовать файл $k в ` echo $k | tr '[:upper:]' '[:lower:]'`.\nОднако файл с таким именем уже существует.\nПожалуйста, введите новое имя файла: "
    read tmp
    mv $i/$k $i/$tmp
fi
done
mv $i/$j $i/` echo $j | tr '[:upper:]' '[:lower:]'`
...
Так (ну если без повторной проверки после ввода имени)? Насколько я помню, это не рабочий вариант.
Ну а по поводу глубины я, если честно, даже не думал. Вряд ли здесь могут возникнуть какие-то проблемы.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.04.2012, 02:51 4
Цитата Сообщение от dessaber Посмотреть сообщение
Ну а по поводу глубины я, если честно, даже не думал.
а надо подумать и точно определить

и проверки файла на существование у тебя нет
сформулируй весь алгоритм от начала до конца
(у тебя должна быть часть прохода по файлам и часть переименования)
0
0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 25
04.04.2012, 13:47  [ТС] 5
Цитата Сообщение от accept Посмотреть сообщение
а надо подумать и точно определить
Я не понимаю, какую роль это может сыграть. Да к тому же переименования в каталоге, да в подкаталоге я думаю будет достаточно.

Что ты имеешь ввиду под проверкой на существование?
Ввод параметров запуска; проверка параметров; переход в каталог, указанный в параметре; выбор регистра в соответствии с параметром; цикл по всем подкаталогам указанного каталога; основной цикл по всем файлам выбранного подкаталога; выборка файла; файл уже находится в том регистре, который нам нужен? - следующая итерация; вспомогательный цикл по всем файлам; псевдопреобразование имени файла, берется другой файл, его имя также преобразуется, новые имена сравниваются; совпадение? - вывод сообщения о необходимости ввода другого имени файла; чтение введенного имени; переименование файла; завершение вспомогательного цикла по всем файлам - переименование изначально выбранного файла; новая итерация основного цикла.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.04.2012, 03:39 6
переименовывает файлы рекурсивно из одного регистра в другой
если файлы существуют, запрашивает ручной ввод имени
Вложения
Тип файла: zip rencase.zip (7.0 Кб, 99 просмотров)
1
05.04.2012, 03:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2012, 03:39
Помогаю со студенческими работами здесь

Поиск и переименование файлов по заданным параметрам
1)Определить количество файлов или подкаталогов в корневом каталоге, к которым все имеют полные...

Пакетное переименование по списку из файла
есть текстовый файл вида имя файла -> новое имя файла имя файла1 -> новое имя файла1 ... все...

Копирование, переименование, перемещение и удаление файла
Разработать программу, которая выполняет копирование, переименование, перемещение и удаление...

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru