2016-03-30 11 views
0

Ich möchte Abschrift mit einem Verzeichnisbaum automatisch erstellen, um in Online-Repos wie GitHub in jedem Verzeichnis angezeigt werden.Wie automatisch erstellt README.md Markdown der Verzeichnisbaum Auflistung

So gegeben, dass ich werde die Linux tree command verwenden, die auf MacOS X brew install tree mit installiert werden können (here für Details), kam ich mit dieser Lösung aus:

tree --dirsfirst --noreport -I README.md > README.md;sed -i '' '1s/^/```/' README.md;echo \ >> README.md; sed -i '' -e '$s/$/```/' README.md 

, wo die ersten sed -i '' '1s/^/```/' README.md Voranstellen der ``` Zeichen – siehe Mastering (Github) Markdown für Details über unterstützte Abschriften.

Das Echo echo \ >> README.md; fügt eine neue Zeile hinzu. Beachten Sie hier, dass ich nicht das sed Äquivalent sed -i '' -e '$a\' filename verwende, da dies nur eine neue Zeile hinzufügt, wenn es nicht existiert, aufgrund der $a Muster (siehe here).

Während der letzte sed -i '' -e '$s/$/```/' README.md der Datei einen nachlaufenden ``` hinzufügt.

Der tree Befehl tree --dirsfirst --noreport -I README.md wird einige Muster ausschließen, Verzeichnis zuerst setzen, Berichtsdatei und Verzeichniszählung ignorieren.

Das Ergebnis wird in etwa wie folgt sein:

```. 
├── bin 
│   ├── Debug 
│   │   ├── SampleLibrary.jar 
│   │   ├── cooper.jar 
│   │   ├── sugar.data.jar 
│   │   ├── sugar.jar 
│   │   └── swift.jar 
│   └── Release 
│    ├── SampleLibrary.jar 
│    ├── cooper.jar 
│    ├── sugar.data.jar 
│    ├── sugar.jar 
│    └── swift.jar 
├── obj 
│   ├── Debug 
│   │   └── Android 
│   │    ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt 
│   │    └── samplelibrary.jar 
│   └── Release 
│    └── Android 
│     ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt 
│     └── samplelibrary.jar 
├── ClassLibrary2.elements 
└── ClassLibrary2.elements.user 
``` 

Sie diesen Abschlag here README.md sehen kann.

Diese Lösung nicht so effizient ist und es beschränkt sich auf -I Muster Optionen von tree unerwünschte dirs, um herauszufiltern (wir Build-Verzeichnisse sagen) oder Dateinamen usw. Auch ist es nicht richtig ein vorhandenes README.md Abschlags zu aktualisieren funktioniert.

Die Lösung sollte auf MacOS X funktionieren (wobei sed einige Unterschiede zu Linux hat).

+0

Warum sich die Mühe Nachverarbeitung der Belichtungsreihe 'zu erhalten \ '\' \' 'Marker? Warum nicht einfach vorher und nachher? '{echo '\' \' \ ''; Baum ...; echo '\ '\' \ ''; }> README.md'? –

Antwort

1

Eine Möglichkeit, Quellcode-Markup zu bekommen, ist alles durch vier Räume einrücken:

tree --dirsfirst --noreport -I README.md | sed 's/^/ /' > README.md 

es Ihren Weg zu tun, eine neue erste und letzte Zeile mit ``` auf jedem hinzufügen, können wir

tun
tree --dirsfirst --noreport -I README.md | 
sed '1s/^/```'$'\n''/;$s/$/'$'\n''```/' > README.md 

, wobei das Einfügen eines neuen Texts in die Ersetzungszeichenfolge mit einem Escape-Befehl im C-Stil erfolgt. Alternativ können wir "$(printf '\n')" verwenden:

tree --dirsfirst --noreport -I README.md | 
sed '1s/^/```'"$(printf '\n')"'/;$s/$/'"$(printf '\n')"'```/' > README.md 

Diese sollten sowohl die Arbeit mit der sed von Mac OS.

Mit GNU sed, wäre es ein wenig einfacher sein:

tree --dirsfirst --noreport -I README.md | 
sed '1s/^/```\n/;$s/$/\n```/' > README.md 
+0

richtig mit Tabs mit 4 Leerzeichen ist es eine alternative Lösung, zumindest auf Github Markup arbeiten. Auf 'MacOS X' sollten wir' -i ''' verwenden, damit es funktioniert. – loretoparisi

+0

@loretoparisi Ich glaube nicht, dass das "-i" erforderlich ist, da wir nicht direkt arbeiten.'README.md' wird aufgrund der Umleitung abgeschnitten, und sed liest nur die Eingabe von einer Pipe und schreibt in die zuvor abgeschnittene Datei. –

Verwandte Themen