これは問題ですが、私はWindows上でプロジェクトに取り組んでいます(私のものではありません)、そして最終的にLinux上で完全に機能するフォークを持つことに決めました。元のプログラマーは、ケースを無条件でコーディングし、開かれたものを呼び出し、小文字のoを小文字で使用して呼び出す...クレイジー...右か?まあ、私はフォルダやファイルを下げるためにすべてのケースをフラットにするpython3スクリプトを作成することができましたが、ファイル内のすべての変更を修正しなければならなかったので、すべての変更を "メモリ内"で行い、プロジェクト内のファイルを更新し、それぞれを更新します。まあ、それは95%多かれ少なかろうとした、まだ修正されていないファイルがたくさんありました...私の頭は、この瞬間、任意の提案で "なぜ"を見つけることができません?パス内のフォルダ内に深い小文字のファイルがあります
#! /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)
素晴らしい解決策!私はPythonで新しくなったことを示しています...しかし、コードライン内の参照を新しいフォルダ名とファイル名に更新する必要があります。手作業で行うと、あまりにも多くのコードとあまりにも多くの参照を修正する必要があります。 – AlexanderFC
コード内のビットにIDEを使用しようとしています。 'FOO.H - > foo.h;で作られたすべての名前を記録することができます。 SomeDir - > somedir'を使用してください。 'sed'をすべてのファイルに適用することができますが、C++で' 'を(' .h'なしで)持っていた場合や 's/FOO/foo /'をすべて置き換えた場合、 '#define FOO_MAX 123'の最初の単語 –