Linux:如何从 CLI 合并具有不同大小写的相同命名文件夹(首选 BASH)

Linux:如何从 CLI 合并具有不同大小写的相同命名文件夹(首选 BASH)

我的 Linux NAS 上有许多名称相同的文件夹,除了大小写之外,如下所示:

  • /数据/库
  • /数据/库/预设
  • /数据/库/预设
  • /数据/库/预设
  • /合并/自述文件
  • /合并/自述文件
  • /合并/自述文件
  • /合并/自述文件
  • ETC。

这在 Linux 上是可以的,尽管并不理想,但因为这是在为 Windows PC 提供服务的 NAS 上,所以客户端 PC 会感到困惑,并且实际上只显示其中一个文件夹的内容,尽管显示了所有变化......

有太多,我想自动将这些文件夹合并在一起。

我们最终得到的大小写实际上无关紧要,尽管“每个单词的首字母大写”的格式是首选,如果远程可能的话,最终目标是每个文件夹名称只有一个。

(注:我知道这些文件夹中包含的文件名也可能存在冲突,但经过讨论,我愿意冒可能存在内容不同的同名文件的风险,因为目前有很多无论如何,内容甚至都不容易访问!)

是否有任何现成的 CLI 工具(或 BASH 脚本)可以执行此操作?

答案1

因此,我最终为最重要的子文件夹创建了一个单独的不区分大小写的数据集(重命名原始子文件夹后),然后运行 ​​rsync 将数据移至新数据集......

现在一切都得到了很好的整合,我对最终结果非常满意。 AFAICT 我们没有丢失任何相关数据...;)(在开始之前我运行了find . | sort -f | uniq -Di,我只看到了文件夹,没有文件,所以我怀疑我们可能丢失了任何东西!)

有人建议不要对 Samba 共享执行此操作,因为 Samba 区分大小写,等等,但他们可以引用的最糟糕的问题是您无法将文件从“Readme.txt”重命名为“ReadMe,txt” ,因为底层 ZFS 会报告该文件已经存在...解决方法很明显:给它一个不同的名称,例如“Read Me.txt”,或者在根据需要重命名之前暂时将其重命名为“readme1.txt” ...那些建议不要在下面使用不区分大小写的 FS 的人都没有答案,这正是我遇到的问题!

相关内容