Nivelar um diretório aninhado & Hierarquia de arquivos da linha de comando do Mac OS X
O uso da linha de comando para realizar o nivelamento de arquivos e estruturas de diretório é obviamente melhor reservado para usuários avançados que se sentem confortáveis com o uso do terminal em geral, se isso não descreve você, considere fazê-lo manualmente através do Finder , ou usando o aplicativo Mac Automator para realizar uma automação semelhante das atividades do sistema de arquivos. No entanto, estamos nos concentrando no achatamento de diretórios a partir da linha de comando aqui.
Exemplo de nivelamento de um diretório de arquivos aninhados
Para entender melhor o que estamos tentando realizar, vamos dar um exemplo de estrutura de diretório imaginária chamada TestDirectory localizada na pasta Home do usuário. Neste exemplo, TestDirectory contém subpastas como SubDirectory1, SubDirectory2, SubDirectory3, etc, cada uma com arquivos nessas respectivas pastas. O que pretendemos fazer aqui é nivelar a estrutura do diretório, movendo todos os arquivos do SubDirectory(X) para o diretório pai “TestDirectory”.O diretório inicial e o conteúdo mostrados recursivamente com o podem se parecer com isto:
$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg
Para nivelar este diretório e o conteúdo do subdiretório de volta para a pasta TestDirectory, você deve usar a seguinte string de comando:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Depois que o conteúdo do diretório for nivelado, ele deve ficar assim quando listado:
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg
Observe que os subdiretórios ainda existirão, eles apenas estarão vazios. Faz sentido? Caso contrário, ou se isso não demonstrar o que você deseja realizar, provavelmente não deseja simplificar um diretório, talvez esteja procurando mesclar ou usar o mesmo para fazer uma cópia complexa em outro lugar.
Achatando uma Estrutura de Diretórios e Hierarquia de Arquivos Aninhados com a Linha de Comando
Pronto para continuar? A string de comando que usaremos para nivelar uma estrutura de diretório e mover todos os arquivos dos subdiretórios para a base do diretório de destino é a seguinte:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Substitua pelo diretório de sua escolha para nivelar, conforme demonstrado no exemplo acima.
Sim, o diretório aparece duas vezes na string de comando, a primeira vez é o diretório que está sendo pesquisado para nivelar os subdiretórios e a segunda vez como o destino dos itens encontrados.
Seja preciso com o destino especificado, porque isso não é reversível (bem, pelo menos sem muito trabalho manual de sua parte), então faça isso apenas se tiver certeza absoluta de que deseja se mudar todos os arquivos nos diretórios de destino, diretórios filhos, de volta à pasta raiz de destino.
Como mencionado anteriormente, você também pode fazer isso no Finder do OS X ou, pelo menos, observar as alterações de arquivo e pasta no Finder. Option + clicar nas pequenas setas na exibição de lista abre todos os subdiretórios, mostrando a hierarquia de pastas como esta:
Depois de mexer com uma variedade de alternativas de bash e zsh, este truque útil foi deixado por um comentarista no StackExcange e acabou sendo o método mais fácil e compatível. Se você conhece uma maneira melhor de simplificar um diretório aninhado, informe-nos nos comentários!
