GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプト:ファイルをディレクトリとサブディレクトリに並べ替えますか?

私は定期的にmarkdownでメモを書きます このような複雑なディレクトリ構造で。

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

このディレクトリ構造は拡大し続けており、各ディレクトリには*.md以外にもさまざまなファイルがあります。 ファイル。 markdown filesを再帰的に検索するシェルスクリプトがあります 親ディレクトリのdoc/ htmlを生成します およびpdf pandocを使用したファイル 。 doc.mdも作成します すべての*.mdのリストを含むファイル(スクリプトを介して) ファイル。現在使用しています

find ~/doc/**/*.md

このリストを生成します。次のように簡単に閲覧できるように、ディレクトリ構造に従って並べ替えたいと思います。

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

fp=/home/user/doc/linux/tmux/tmux.mdの場合 はファイルのフルパスの例であり、${${fp%/*.md}#/home/user/doc/} linux/tmuxをくれます 。さらに処理してlinuxを分離できます およびtmux など。しかし、ディレクトリ構造を作成するためのアルゴリズムはわかりません。これには、各ファイルの完全なディレクトリ構造を格納し、それを並べ替えるために配列を使用する必要があると思います。

これに対するシェルスクリプトがすでに存在する場合は、私に知らせてください。それ以外の場合は、可能なアルゴリズムへのポインタを歓迎します。

承認された回答:

あなたがしようとしているのがすべての.mdの素敵なフォーマットされた出力を生成することだけなら ファイル、tree あなたが望むことを正確に行う必要があります:

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

-Aを追加します きれいな線の場合は、HTML/XMLへの出力などの興味深いことも行います。


Linux
  1. シェル文字と変数を使用して作業ディレクトリを識別する方法

  2. 特定のディレクトリ内のファイルとサブディレクトリの数をカウントする方法

  3. ディレクトリ(およびそのサブディレクトリ)内のすべてのpdfファイルを単一の出力ディレクトリに再帰的にコピーするにはどうすればよいですか?

  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. Linux ファイルとディレクトリの削除

  3. UNIX シェル スクリプトからファイルを ftp およびダウンロードする方法

  1. バックアップする必要がある9つのLinuxディレクトリとバックアップしない1つのLinuxディレクトリ

  2. 複数のディレクトリを個々のZipファイルに圧縮するコマンド?

  3. Linux でのファイルとディレクトリの作成と削除