Имеется под несколько сотен файлов, причем некоторые в подкаталогах, а некоторые в подкаталогах подкаталогов и т.д.
Нужно имена их всех (включая подкаталоги) привести к нижнему регистру.
Слышал про программу prename, но регэкспы для меня пока - темный лес.
-
без них - никак
-
пришел к выводу что тут поможет find (он очень мощный)
-
сделал уже?(:
-
Один из способов, накидал быстро на питоне, называем 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: осторожно! если будут одинаковые имена, но с разными регистрами, останется только один последний.
-
-
каталоги не приводит, поленился сделать, но доработать оченьпросто :)
-
-
Уговорили
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() )
|
-
-
даешь рекурсивный вариант с os.path.walk :D
-
-
Не получится с ним
-
-
что может помешать?
можно вапче устроить contest местный
кто придумает больше способов выполнения этой простой задачи на любом языке
-
-
он возвращает список дапок допустим в корне Aaaa первая я ее переименовываю, он пытается войти в нее, а там уже нету такой :)
-
-
а надо с конца дерева переименование начинать :)
-
-
Тогда прийдется сохранить все дерево, что повлечет лишние затраты памяти, имхо не самое лучшее решение.
-
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/' {} \;
|
-
-
Спасибо!
-
-
как я понял именно это помогло?
-
-
Ну, это уж всяко удобней, чем создавать питоновские скрипты.
И уж совершенно неправильно ставить для этого какой-то дополнительный софт.
-
-
Это до тех пор пока тебе всеголиш нужно поменять регистр, могут быть и более сложные задачи, возможно комунибуть это поможет :)
-
-
Разумеется, просто для данной конкретной задачи это, ИМХО, стрелять по комарам из минигана.
-
-
Вот небольшая програмка которая делает 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
неверите - проверьте сами
Так что ... у кого миниган ... спорный вопрос.
-
-
думаю lullaby пытался донести до вас не то что этот скрипт медленно работает, а то что
1) надо знать python
2) даже зная его (питон), две строчки с использованием более распространенных средств предпочтительнее
-
-
да я прекрасно его понял
агитирую за питон :)
-
http://www.infinicode.org/code/pyrenamer/
вот кстати неплохая штука. крайне рекомендую :)
-
Так же рекомендую следующий скрипт:
1
2
3
4
5
6
|
for file in *
do
mv $file `echo $file | tr [:upper:] [:lower:]` 2>/dev/null
done
|
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|