Linux python komut dosyası aynı ada sahip ancak farklı durumda olan dizini kontrol ediyor


0

Linux'taki harici bir sabit sürücüdeki ntfs bölümünü kullanarak, aynı diski Windows'ta kullanmak için aynı ada sahip dizinleri yeniden adlandırabilmek istiyorum.

Mesele şu ki, büyük harfler dizinin adına herhangi bir yerde olabilir ve her iki yönde de büyük harfler olabilir. Dizinleri nasıl yeniden adlandıracağımı biliyorum ama böyle özelliklere sahip bir dizinin var olup olmadığını nasıl kontrol edeceğimi bilmiyorum.

Bazı sorunları çözmek için python'da bir komut dosyası geliştirdim, bu nedenle çözüm python'da olsaydı daha iyi olurdu, ama bash da bunu yapardı.

Örneğin :

fiRstdiRectory
firSTDirectory

Betik, ilk dizini şu şekilde değiştirir:

firstdirectory_0

Yanıtlar:


1

Böyle yapmayı dene

#!/usr/bin/python
import os

# Collect the names and type (file or directory)
filenames = os.listdir(".")
filetypes = map(lambda x: os.path.isdir(x), filenames)
files = zip(filenames, filetypes)
files = sorted(files, key=lambda x: (x[0].lower(), x[1]))

# Create a set of downcased filenames for quick lookup
files_lower = set()
for f in files:
    files_lower.add(f[0].lower())

previous_name = ""

# Rename the files
for f in files:
    if f[0].lower() == previous_name.lower() and f[1] is True:
        # Find an unused index
        c = 0
        while True:
            f_rename = f[0].lower() + "_" + str(c)
            if f_rename.lower() in files_lower:
                c += 1
            else:
                print("renaming %s to %s" % (f[0], f_rename))
                os.rename(f[0], f_rename)
                files_lower.add(f_rename.lower())
                break
    previous_name = f[0]

Bir dizinde aşağıdaki girişlerin olduğunu varsayalım

$ ls -F
a  A/  b/  B/  B_0/  bb/  bB/  Bb/  BB/  c/  d/  D/

Başka bir deyişle, bunlar normal bir dosya olan "a" hariç tüm dizinlerdir. Bu betiği çalıştırmak aşağıdaki çıktıyı verecektir

renaming A to a_0
renaming b to b_1
renaming Bb to bb_0
renaming bB to bb_1
renaming bb to bb_2
renaming d to d_0

ve dizin şimdi aşağıdaki girişleri içeriyor:

$ ls -F
a  a_0/  B/  B_0/  b_1/  BB/  bb_0/  bb_1/  bb_2/  c/  D/  d_0/

Komut dosyası yalnızca dizinleri yeniden adlandırır (yalnızca dizinleri yeniden adlandırdığınızdan bahsettiniz) ve yeniden adlandırdığı herhangi bir şeyin adını tüm küçük harflere dönüştürür (örneğinize göre). Ayrıca, bir dizini zaten var olan bir isimle yeniden adlandırmamaya da dikkat edin (bu nedenle, B_0 zaten var olduğundan, örneğimdeki b - & b; b_1).

Umarım bu sizin için çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.