GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Skript:Dateien in Verzeichnisse und Unterverzeichnisse sortieren?

Ich schreibe meine Notizen routinemäßig in markdown in einer komplexen Verzeichnisstruktur wie dieser.

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

Diese Verzeichnisstruktur wird ständig erweitert und jedes Verzeichnis hat neben *.md verschiedene andere Dateien Dateien. Ich habe ein Shell-Skript, das rekursiv nach markdown files sucht im übergeordneten Verzeichnis doc/ und generiert html und pdf Dateien mit pandoc . Ich erstelle auch eine doc.md Datei (über das Skript), die eine Liste aller *.md enthält Dateien. Derzeit verwende ich,

find ~/doc/**/*.md

um diese Liste zu erstellen. Ich möchte sie nach der Verzeichnisstruktur für eine einfache Durchsicht wie folgt sortieren:

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

Wenn fp=/home/user/doc/linux/tmux/tmux.md ist ein vollständiger Beispielpfad einer Datei, dann ${${fp%/*.md}#/home/user/doc/} gibt mir linux/tmux . Ich kann es weiterverarbeiten, um linux zu isolieren und tmux usw. Aber ich kenne den Algorithmus nicht, um die Verzeichnisstruktur zu erstellen. Ich denke, dass dies die Verwendung von Arrays erfordern wird, um die vollständige Verzeichnisstruktur für jede Datei zu speichern und sie dann zu sortieren.

Wenn dazu bereits ein Shell-Skript existiert, lassen Sie es mich bitte wissen. Ansonsten sind Hinweise auf mögliche Algorithmen willkommen.

Akzeptierte Antwort:

Wenn Sie nur eine schön formatierte Ausgabe aller .md erstellen möchten Dateien, tree sollte genau das tun, was Sie wollen:

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

Fügen Sie -A hinzu für hübsche Linien macht es auch interessante Dinge wie die Ausgabe in HTML/XML.


Linux
  1. So identifizieren Sie Arbeitsverzeichnisse mithilfe von Shell-Zeichen und Variablen

  2. So zählen Sie die Anzahl der Dateien und Unterverzeichnisse in einem bestimmten Verzeichnis

  3. Befehl zum Komprimieren mehrerer Verzeichnisse in einzelne Zip-Dateien?

  4. Linux Dateien und Verzeichnisse löschen

  5. Wie kann ich Dateien aus einem UNIX-Shell-Skript per FTP übertragen und herunterladen?

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

So benennen Sie Dateien und Verzeichnisse in Linux um

So kopieren Sie Dateien und Verzeichnisse unter Linux

So entfernen Sie Dateien und Verzeichnisse auf einem Linux-Terminal

Linux:Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen finden

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen