Ok, das ist die Sache, ich habe an einem Projekt unter Windows gearbeitet (nicht meiner) und schließlich beschlossen, eine voll funktionsfähige Fork unter Linux zu haben, das Hauptproblem ist das die ursprünglichen Programmierer codierten die Fälle ohne Widerhaken, öffneten und riefen Dinge mit Hilfe von Großbuchstaben oder Kleinbuchstaben nach Belieben ... verrückt ... oder? Nun, ich habe es geschafft, ein Python3-Skript zu erstellen, um alle Fälle in Ordner und Dateien zu reduzieren, aber ich musste immer noch alle Änderungen in den Dateien korrigieren, es bedeutet, alle Änderungen "im Speicher" zu behalten und alle zu überprüfen Dateien innerhalb des Projekts und aktualisieren sie jeweils. Nun, es funktionierte 95% mehr oder weniger, hat immer noch eine Menge unkorrigierter Dateien ... mein Kopf kann das "Warum" in diesem Moment nicht finden, irgendwelche Vorschläge?Tiefe Kleinbuchstaben innerhalb von Dateien innerhalb von Ordnern in einem Pfad
#! /usr/bin/env python
import os
import re
import time
import string
import mimetypes
import subprocess
keys = set()
def flat(path):
list = os.listdir(path)
for item in list:
obj = os.path.normpath(path+item)
obj_new = os.path.normpath(path+item.lower())
if os.path.isfile(obj):
keys.add(item)
if item!=item.lower():
print('[Yes]',obj, '-->', obj_new)
os.replace(obj, obj_new)
else:
print(' [No]',obj)
else:
obj = obj + '/'
flat(obj)
item = item + '/'
keys.add(item)
if item!=item.lower():
print('[Yes]',obj, '-->', obj_new)
os.replace(obj, obj_new)
else:
print(' [No]',obj)
def insidefix(path, keys):
list = os.listdir(path)
for item in list:
obj = os.path.normpath(path+item)
if os.path.isfile(obj):
(mime,enc) = mimetypes.guess_type(obj)
parts = re.split('\.', item)
ext = parts[len(parts)-1]
if mime!=None:
t = re.split('/', mime)
if (t[0]=='text') | (ext in set):
print('Fixing -->',obj, '|', mime)
for ref in keys:
pattern = ''
for c in range(len(ref)):
if (ref[c].isalpha()):
pattern=pattern+'['+ref[c].upper()+ref[c].lower()+']'
else:
pattern = pattern + ref[c]
arg= 's|'+pattern+'|'+ref.lower()+'|g'
subprocess.call(["/bin/sed", "-i", arg, obj])
print("/bin/sed", "-i", arg, obj)
else:
obj = obj + '/'
insidefix(obj, keys)
def runingtime(t):
h=m=s=0
for i in range(t):
if s==60:
m+=1
s=0
if m==60:
h+=1
m=0
s+=1
print(h,':',m,':',s)
path = '/warehouse/projects/igp/'
set=['php','txt','css','log','sym','map','htm','thmx','xml','mht','ini','js','html','backup','qry','config','json']
begin = time.time()
flat(path)
print('***********************************')
for k in keys:
print(k)
print('***********************************')
insidefix(path, keys)
end = time.time()
dif = end-begin
final = int(dif)
runingtime(final)
Brilliante Lösung! ... es zeigt mir, dass ich nur neu in Python bin ... Aber ich muss immer noch die Referenzen innerhalb der Codezeilen (auf die neuen Ordnernamen und Dateinamen) aktualisieren, kann nicht sein Von Hand gemacht, gibt es zu viel Code und zu viele Referenzen, die behoben werden müssen. – AlexanderFC
Ich würde versuchen, eine IDE für Bits innerhalb des Codes zu verwenden. Sie können alle Umbenennungen aufzeichnen, die 'FOO.H -> foo.h; SomeDir -> Somedir' und dann z. 'sed' auf all Ihren Dateien, aber es kann auch fehlschlagen, was ist, wenn es C++ ist und 'include' (ohne '.h') hat oder wenn Sie alle' s/FOO/foo/'ersetzen, ist es leicht versehentlich zu ersetzen erstes Wort in '#define FOO_MAX 123' –