Nivelar um diretório aninhado & Hierarquia de arquivos da linha de comando do Mac OS X

Anonim

Você já precisou nivelar uma estrutura de diretório, movendo todo o conteúdo do arquivo de pastas filhas de diretórios para uma única pasta? Embora você possa fazer isso manualmente movendo arquivos e pastas do sistema de arquivos do Mac OS X ou Linux, uma opção mais rápida é recorrer à linha de comando. Talvez em um ponto você tenha criado uma hierarquia aninhada de diretórios que agora precisa desfazer movendo todos os arquivos dessas pastas aninhadas e voltando para um único diretório, ou talvez você esteja procurando simplificar uma estrutura de diretório, seja qual for o motivo, isso truque funciona muito bem.

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!

Nivelar um diretório aninhado & Hierarquia de arquivos da linha de comando do Mac OS X