Online video hd

Смотреть кино видео

Официальный сайт rnns 24/7/365

Смотреть видео бесплатно

14.09.09 16:03 lullaby

Есть вопрос![РЕШЕНО] Как привести имена большого количества файлов к нижнему регистру?

Имеется под несколько сотен файлов, причем некоторые в подкаталогах, а некоторые в подкаталогах подкаталогов и т.д.
Нужно имена их всех (включая подкаталоги) привести к нижнему регистру.
Слышал про программу prename, но регэкспы для меня пока - темный лес.
Username 14.09.09 16:22 # +0


без них - никак
|xed| 14.09.09 16:27 # +0
пришел к выводу что тут поможет find (он очень мощный)
aazm 14.09.09 16:38 # +0
сделал уже?(:
evgenyl 14.09.09 16:54 # +4
Один из способов, накидал быстро на питоне, называем renamer.py кидаем в папку с файлами, даем права на запуск и запускаем.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python

from os import listdir, rename
from os.path import isfile, isdir

def renamer( dir='./' ):
        for i in listdir(dir):
                if isfile(dir+i):
                        yield dir,i
                elif isdir(dir+i):
                        for i in renamer( dir+i+'/' ): yield i
for i in renamer():
        if i[1]!=i[1].lower():
                rename( i[0]+i[1],i[0]+i[1].lower() )
 


ps: осторожно! если будут одинаковые имена, но с разными регистрами, останется только один последний.
evgenyl 14.09.09 16:55 # +1
каталоги не приводит, поленился сделать, но доработать оченьпросто :)
evgenyl 14.09.09 17:02 # +5
Уговорили
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python

from os import listdir, rename
from os.path import isfile, isdir

def renamer( dir='./' ):
        for i in listdir(dir):
                if isfile(dir+i):
                        yield dir,i
                elif isdir(dir+i):
                        if i!=i.lower(): rename( dir+i, dir+i.lower() )
                        for i in renamer( dir+i.lower()+'/' ): yield i

for i in renamer():
        if i[1]!=i[1].lower():
                rename( i[0]+i[1],i[0]+i[1].lower() )
 
bobry 14.09.09 17:07 # +0
даешь рекурсивный вариант с os.path.walk :D
evgenyl 14.09.09 17:26 # +0
Не получится с ним
bobry 14.09.09 17:57 # +0
что может помешать?
можно вапче устроить contest местный
кто придумает больше способов выполнения этой простой задачи на любом языке
evgenyl 14.09.09 17:59 # +0
он возвращает список дапок допустим в корне Aaaa первая я ее переименовываю, он пытается войти в нее, а там уже нету такой :)
bobry 14.09.09 18:02 # +1
а надо с конца дерева переименование начинать :)
evgenyl 15.09.09 09:06 # +0
Тогда прийдется сохранить все дерево, что повлечет лишние затраты памяти, имхо не самое лучшее решение.
xT 14.09.09 16:55 # +14
1
2
3
find /path/to/find/files -type f -exec rename 'y/A-Z/a-z/' {} \;
find /path/to/find/dirs -type d -exec rename 'y/A-Z/a-z/' {} \;
 
lullaby 14.09.09 17:04 # +0
Спасибо!
predator 14.09.09 17:53 # +0
как я понял именно это помогло?
lullaby 14.09.09 18:03 # +0
Ну, это уж всяко удобней, чем создавать питоновские скрипты.
И уж совершенно неправильно ставить для этого какой-то дополнительный софт.
evgenyl 15.09.09 09:08 # +0
Это до тех пор пока тебе всеголиш нужно поменять регистр, могут быть и более сложные задачи, возможно комунибуть это поможет :)
lullaby 15.09.09 14:36 # +0
Разумеется, просто для данной конкретной задачи это, ИМХО, стрелять по комарам из минигана.
evgenyl 15.09.09 16:21 # +1
Вот небольшая програмка которая делает 10 000 файлов и если не ошибаюсь 70 000 папок, по простому алгоритму часть из них в верхнем регистре
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python

import md5
from os import makedirs

FILES=10000

for i in xrange(FILES):
        d=md5.new(str(i)).hexdigest()
        f=[ d[ i*4: (i+1)*4 ]  for i in range( len(d)/4 ) ]
        f=[ i if sum(map(ord,i))%2 else i.upper() for i in f ]
        fd='./'+'/'.join(f[:-1])
        try:
                makedirs(fd)
        except:
                pass
        open(fd+'/'+f[-1],'w').close()

вот мои результаты работы обоих скриптов, перед каждым тестом я удалял и заного генерил дерево файлов и папок, каждый тест делал 2 раза, fs - reiser

time ./lower.sh
real 1m29.870s
user 0m14.997s
sys 1m12.705s

time ./lower.sh
real 1m36.942s
user 0m15.401s
sys 1m14.377s

time ./lower.py
real 0m12.278s
user 0m1.552s
sys 0m2.732s

time ./lower.py
real 0m15.420s
user 0m1.504s
sys 0m2.692s

неверите - проверьте сами
Так что ... у кого миниган ... спорный вопрос.
predator 15.09.09 18:27 # +0
думаю lullaby пытался донести до вас не то что этот скрипт медленно работает, а то что
1) надо знать python
2) даже зная его (питон), две строчки с использованием более распространенных средств предпочтительнее
evgenyl 15.09.09 21:01 # +0
да я прекрасно его понял
агитирую за питон :)
bobry 14.09.09 17:07 # +0
http://www.infinicode.org/code/pyrenamer/
вот кстати неплохая штука. крайне рекомендую :)
renya 14.09.09 20:56 # +3
Так же рекомендую следующий скрипт:
1
2
3
4
5
6

for file in *
do
 mv $file `echo $file | tr [:upper:] [:lower:]` 2>/dev/null
done
 

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 50)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1095 из 78 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн