Bash

Linux:如何從 CLI 合併具有不同大小寫的相同命名文件夾(首選 BASH)

  • October 10, 2021

我的 Linux NAS 上有名稱相同的雜項文件夾,但大小寫除外,如下所示:

  • /數據/庫
  • /數據/庫/預設
  • /數據/庫/預設
  • /數據/庫/預設
  • /合併/自述文件
  • /合併/自述文件
  • /合併/自述文件
  • /合併/自述文件
  • 等等

這在 Linux 上是可以的,即使不是可取的,但是因為這是在為 Windows PC 提供服務的 NAS 上,所以客戶端 PC 會感到困惑,並且實際上只顯示其中一個文件夾的內容,儘管顯示了所有變體……

有這麼多,我想自動將這些文件夾合併在一起。

我們最終得到的大小寫實際上是無關緊要的,儘管“每個單詞的首字母大寫”的格式會更受歡迎,但如果可能的話,最終目標是每個文件夾名稱中只有一個。

(注意:我知道這些文件夾中包含的文件名也可能存在衝突,但經過討論,我願意冒可能存在具有不同內容的同名文件的風險,僅僅是因為目前很多的內容甚至都不容易訪問!)

是否有任何現成的 CLI 工具(或 BASH 腳本)來執行此操作?

所以我最終為最重要的子文件夾創建了一個單獨的不區分大小寫的數據集(在重命名原始子文件夾之後),然後執行 rsync 將數據移動到該新數據集……

現在一切都很好地整合了,我對最終結果非常滿意。AFAICT 我們沒有失去任何相關數據… ;) (在開始之前我跑了find . | sort -f | uniq -Di,我只看到文件夾,沒有文件,所以我懷疑我們可能會失去任何東西!)

有一些建議不要對 Samba 共享執行此操作,因為 Samba 可以區分大小寫,bla bla bla,但他們可以引用的最糟糕的問題是您無法將文件從“Readme.txt”重命名為“ReadMe,txt” ,因為底層 ZFS 將報告該文件已經存在…解決方法很明顯:給它一個不同的名稱,如“Read Me.txt”,或者在重命名之前暫時重命名它“readme1.txt”。 …那些建議不要在下面使用不區分大小寫的 FS 的人都沒有答案,這正是我遇到的問題!

引用自:https://unix.stackexchange.com/questions/672455