Linux python 脚本检查具有相同名称但不同大小写的目录

Linux python 脚本检查具有相同名称但不同大小写的目录

在 Linux 上的外部硬盘上使用 ntfs 分区,我希望能够重命名具有不同大小写的同名目录,以便在 Windows 上使用同一个磁盘。

问题是大写字母可以在目录名称中的任何位置,并且两个目录中都可以有大写字母。我知道如何重命名目录,但不知道如何检查是否存在具有此类特征的目录。

我已经用 python 开发了一个脚本来解决一些问题,因此如果解决方案是用 python 的话会更好,但 bash 也可以这样做。

例如 :

fiRstdiRectory
firSTDirectory

该脚本会将第一个目录重命名为:

firstdirectory_0

答案1

尝试这样做

#!/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]

假设目录中有以下条目

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

换句话说,除了“a”是常规文件外,它们都是目录。运行此脚本将给出以下输出

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

目录现在包含以下条目

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

该脚本仅重命名目录(您提到您仅重命名目录)并将重命名的任何内容的名称转换为全部小写(基于您的示例)。它还会小心不要将目录重命名为已经存在的名称(因此在我的示例中 b -> b_1,因为 B_0 已经存在)。

希望这对你有用。

相关内容