Mesclar pastas com praticamente o mesmo nome mas diferentes invólucros

2

Ao procurar nas configurações avançadas do Dropbox, perdi uma pasta. Eu só descobri isso cerca de um mês depois. Consegui recuperar essa pasta do Dropbox, mas a estrutura de arquivos das subpastas mudou drasticamente. A pasta atual agora contém duas versões de cada subpasta original. Atualmente, é assim:

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

Portanto, tenho subpastas em minúsculas e tenho subpastas BumpyCase. As subpastas minúsculas contêm subsubfolders e as subpastas BumpyCase contêm arquivos. As subsubfolders contêm novamente uma versão em minúscula e uma versão do BumpyCase de suas respectivas subpastas. E essa história continua por vários níveis.

Felizmente, não há duplicação de arquivos, apenas em pastas (mesmas letras, mas maiúsculas diferentes). Portanto, em cada nível, preciso mesclar pastas que diferem apenas no conjunto de nomes. E para fazer isso corretamente eu preciso começar no nível mais profundo e trabalhar até a pasta de nível superior.

Eu quero que tudo entre nos diretórios do CamelCase.

A partição onde os dados são é uma partição Ext4. Eu tenho acesso a várias partições NTFS.

Existe um prático comando / ferramenta do Linux ou alguém com uma ideia para um script que possa realizar isso? Eu já estou muito feliz por ter recuperado minhas coisas, mas a estrutura atual é um grande inconveniente.

    
por Aeronaelius 10.10.2013 / 14:31

2 respostas

0

Todos os comandos iniciam a partir do diretório de nível superior e assumem que você não possui novas linhas nos nomes de arquivos. Eu assumo as ferramentas GNU (Linux ou Cygwin). Atenção, isso é tudo código não testado, digitado diretamente no navegador.

É bastante fácil mesclar todos os diretórios para minúsculas. Uma abordagem é recopiar todos os diretórios e mesclá-los em suas contrapartes minúsculas. Faça a profundidade de percurso primeiro para que, quando você mesclar dois diretórios, seu conteúdo já esteja normalizado.

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
' {} \;

Se você deseja mesclar de minúsculas para maiúsculas e minúsculas, é necessário determinar o diretório de maiúsculas e minúsculas correspondente a cada diretório minúsculo. O snippet a seguir escolhe um diretório arbitrário de letras maiúsculas e minúsculas se houver mais de um.

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
' {} \;
    
por 11.10.2013 / 02:45
0

Eu tive o mesmo problema e encontrei uma solução prática.

Basta ir à sua conta do Dropbox e renomear suas pastas raiz com nomes minúsculos e baixá-los novamente!

Eu li em outros lugares que o Dropbox tem um problema com pastas e insensibilidade a maiúsculas e minúsculas. Não tenho certeza se ter nomes de pasta em maiúsculas foi o único problema. Eu tive outros problemas que podem afetar o sistema de arquivos Dropbox além de pastas com letras maiúsculas, como compartilhar as pastas de um Mac e tentar baixá-las em uma máquina Ubuntu. Mas o problema que encontrei foi semelhante ao relatado aqui. Todas as pastas foram vistas corretamente no servidor web, mas quando baixadas todas as pastas começando com letras maiúsculas foram duplicadas e algum conteúdo foi para as pastas com letras maiúsculas e algum conteúdo para as pastas com letras minúsculas, então eu estava procurando uma maneira de mesclar aqueles pastas.

    
por 07.08.2018 / 23:01