Объединение папок с практически одинаковыми именами, но разным регистром

Объединение папок с практически одинаковыми именами, но разным регистром

Копаясь в расширенных настройках 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
' {} \;

Связанный контент