合併名稱幾乎相同但大小寫不同的資料夾

合併名稱幾乎相同但大小寫不同的資料夾

在深入研究 Dropbox 的高級設定時,我丟失了一個資料夾。大約一個月後我才發現這一點。我設法從 Dropbox 取回該資料夾,但子資料夾的檔案結構發生了巨大變化。目前資料夾現在包含每個原始子資料夾的兩個版本。目前它看起來像這樣:

folder
  /folder1
    /folder11
      /folder111
      /Folder111
       /file1111
       /file1112
       /file1113
    /Folder11
      /file111
      /file112
    /folder12
    /Folder12
  /folder2
  /folder3  

所以我有小寫子資料夾和 BumpyCase 子資料夾。小寫子資料夾包含子子資料夾,BumpyCase 子資料夾包含檔案。子子資料夾再次包含其各自子資料夾的小寫字母和 BumpyCase 版本。這個故事有幾個層次的深度。

幸運的是,文件中沒有重複,只有資料夾中沒有重複(字母相同但大小寫不同)。因此,在每個層級上,我需要合併僅名稱大小寫不同的資料夾。為了正確地做到這一點,我需要從最深層開始,直到頂層資料夾。

我希望所有內容都進入 CamelCase 目錄。

資料所在的分區是Ext4分區。我可以存取多個 NTFS 分割區。

是否有方便的 Linux 命令/工具或有人知道可以完成此任務的腳本?我已經很高興我拿回了我的東西,但目前的結構帶來了很大的不便。

答案1

我遇到了同樣的問題並找到了一個實用的解決方案。

只需前往您的 Dropbox 帳戶並用小寫名稱重命名您的根資料夾,然後再次下載即可!

我讀別處Dropbox 有資料夾和不區分大小寫的問題。我不確定資料夾名稱大寫是否是唯一的問題。除了大寫字母的資料夾之外,我還遇到了其他可能影響 Dropbox 檔案系統的問題,例如從 Mac 共用資料夾並嘗試在 Ubuntu 電腦中下載它們。但我發現的問題與這裡報告的問題類似。所有資料夾在網頁伺服器上都可以正確看到,但是下載時,所有以大寫字母開頭的資料夾都被複製,一些內容進入大寫字母資料夾,一些內容進入小寫字母資料夾,所以我正在尋找一種方法來合併這些資料夾資料夾。

答案2

所有命令都從頂級目錄開始,並假設檔案名稱中沒有換行符。我假設使用 GNU 工具(Linux 或 Cygwin)。警告,這都是未經測試的程式碼,直接輸入到瀏覽器中。

將所有目錄合併為小寫相當容易。一種方法是遞歸所有目錄並將它們合併到相應的小寫目錄中。首先進行遍歷深度,以便當您合併兩個目錄時,它們的內容已經標準化。

find . -depth -name '*[[:upper:]]*' -type d -execdir sh -c '
  source=$0
  target=$(echo "$source" | tr "[:upper:]" "[:lower:]")
  if [ "$source" != "$target" ]; then  # need to rename or merge
    if [ -d "$target" ]; then
      # merge $source (mixed- or uppercase) into $target (lowercase)
      find "$source" -mindepth 1 -maxdepth 1 -exec mv -bt "$target" {} +
      rmdir "$source"
    else
      mv "$source" "$target"
    fi
  fi
' {} \;

如果要從小寫合併為混合大小寫,則需要確定每個小寫目錄對應的混合大小寫目錄。如果有多個目錄,以下程式碼片段會選擇一個任意大小寫混合的目錄。

find . -depth ! -name '*[[:upper:]]*' -type d -execdir sh -c '
  source=$0
  target=$(find . -maxdepth 1 -iname "$source" -not -name "$source" -print -quit)
  if [ -n "$target" ]; then …
  fi
' {} \;

相關內容