
在深入研究 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
' {} \;