重命名不同目录中的多个文件

重命名不同目录中的多个文件

我在 DSM 为 6.1+ 的 Synology NAS 服务器上存储了大约 5TB 的数据,因此 bash 应该可以在这些系统上使用。问题是我们目前正在将此数据存档到格式化为 NTFS 的外部硬盘驱动器上。主要问题是在归档过程中似乎会出现一些文件冲突,Linux 区分大小写,而 Windows 不区分大小写。例如:

测试.txt

测试.txt

在 Linux 中,这是两个独立的文件,但 Windows 会将它们视为一个文件。

手头的问题是,我应该能够使用我们过去使用的工具找出哪些文件是冲突的,但文件太多,无法手动重命名。这些文件分布在多个目录中,向下 3 或 4 个目录。如果我能够找出所有实际上存在冲突的文件,重命名这些文件的最简单方法是什么?

只要它们不离开当前位置,命名实际上并不重要。过去我只是在其中一些冲突的末尾添加了“1”,但就像我说的,这次有数百个冲突。

有没有推荐的工具来查找此类文件冲突?

答案1

您可以使用 获取当前文件夹和子文件夹中所有文件的列表find . | sort -f。排序将忽略大小写,以便具有相同名称(忽略大小写)的文件彼此相邻,例如:

./folder/dir/something/test
./folder/dir/something/TEST

这应该传递给一个脚本,例如Python,它可以检查每一行的下一行/上一行,如果有匹配,您可以重命名该文件,添加下层存储或其他内容。我想,这应该不会太难解决。

编辑:

#!/usr/bin/env python3

import sys

if __name__ == "__main__":
   old_line = ""
   cur_line = ""
   for line in sys.stdin:
      old_line = cur_line
      cur_line = line
      if old_line.lower() == cur_line.lower():
         print("Duplicate found!")
         print("File: {}".format(cur_line))

我这样称呼它:

find ../ | sort -f | ./rename_files.py
Duplicate found!
File: ../c/modern-approach/test

因为该目录中有第二个文件名为../c/modern-approach/TEST.

相关内容