shell Script: Classificando arquivos em diretórios e subdiretórios

4

Eu rotineiramente escrevo minhas anotações em markdown em uma estrutura de diretórios complexa como essa.

~/doc/doc.md
~/doc/math/linearAlgebra/linearAlgebra.md
~/doc/math/linearAlgebra/numericalAnalysis.md
~/doc/linux/tmux/tmux.md
~/doc/linux/newsbeuter/newsbeuter.md

Essa estrutura de diretórios está sempre em expansão e cada diretório tem vários outros arquivos além dos arquivos *.md . Eu tenho um script de shell que recursivamente procura markdown files no diretório pai doc/ e gera html e pdf arquivos usando pandoc . Eu também crio um arquivo doc.md (através do script) que contém uma lista de todos os arquivos *.md . Atualmente eu uso,

find ~/doc/**/*.md

para gerar essa lista. Eu gostaria de classificá-los de acordo com a estrutura de diretórios para fácil leitura como esta:

math
   linearAlgebra
                          linearAlgebra.md
                          numericalAnalysis.md
linux
   tmux
                          tmux.md
   newsbeuter
                          newsbeuter.md

Se fp=/home/user/doc/linux/tmux/tmux.md for um caminho completo de exemplo de um arquivo, ${${fp%/*.md}#/home/user/doc/} me fornecerá linux/tmux . Eu ainda posso processá-lo para isolar linux e tmux etc. Mas eu não sei o algoritmo para criar a estrutura de diretórios. Eu acho que isso exigirá o uso de matrizes para armazenar a estrutura de diretórios completa para cada arquivo e, em seguida, classificá-lo.

Se já existe um script de shell para isso, por favor me avise. Caso contrário, ponteiros sobre possíveis algoritmos serão bem-vindos.

    
por devendra 01.03.2014 / 15:09

1 resposta

8

Se tudo o que você deseja fazer é produzir uma saída formatada de todos os arquivos .md , tree deve fazer exatamente o que você deseja:

tree -P '*.md' /home/user/doc

Adicione -A para linhas bonitas, também faz coisas interessantes como saída para HTML / XML.

    
por 01.03.2014 / 15:21