Mesclar e minúsculas Diretórios e arquivos

1

Eu tenho um diretório como este

root/A/b/SomeFile.jpg
root/A/B/OtherFIle.jpg
root/a/D/yet_again.jpg

E eu gostaria disso

root/a/b/somefile.jpg
root/a/b/otherfile.jpg
root/a/d/yet_again.jpg

OR

other_root/a/b ...

Estou feliz em assumir que não há colisões.

Como eu poderia fazer isso em um script bash ou python (ou algo pré-criado para classificar arquivos e diretórios)?

Eu faria manualmente, mas existem milhares deles.

    
por issackelly 13.08.2010 / 18:09

2 respostas

1

Solução zig obrigatória:

for x in root/**/*(On); do mv -i $x ${x:h}/${x:t:l}; done

Isso pedirá confirmação em caso de colisão.

Explicação: ** significa todos os diretórios (sub) *, recursivamente. (On) ordena a ordem lexicográfica decrescente, de modo que os diretórios sempre aparecem após o conteúdo. ${x:h} significa que a parte do nome do diretório de $x , ${x:t} significa seu nome base e o :l convertido para minúsculas.

O Bash 4 pode fazer isso, pois tem ** , mas não sei se tem um equivalente de (On) .

    
por 13.08.2010 / 20:29
0

Aqui está uma maneira muito específica e não geral de resolver esse problema, que eu chamaria de "força bruta" na melhor das hipóteses.

import os
import re
import shutil

path = os.getcwd()
newpath = os.path.join(path,'..','newpics')
for item in os.listdir(path):
    path1 = os.path.join(path,item)
    if os.path.isdir(path1):
        for item_2 in os.listdir(path1):
            path2 = os.path.join(path1,item_2)
            for item_3 in os.listdir(path2):
                path3 = os.path.join(path2,item_3)
                item_lc = item.lower()
                item_2lc = item_2.lower()
                item_3lc = item_3.lower()
                pic_path = os.path.join(newpath,item_lc,item_2lc,item_3lc)
                print os.path.join(path,item,item_2,item_3)
                print pic_path
                try:
                    os.makedirs(os.path.join(newpath,item_lc,item_2lc))
                except OSError:
                    pass
                shutil.copyfile(path3,pic_path)
    
por 13.08.2010 / 19:37