So schließen Sie mehrere Dateierweiterungen im Baum aus

345
Hagbard Celine

Wenn Sie den Tree-Befehl verwenden, möchte ich die Auflistung *.pngund *.svgdie Ausgabe ausschließen. Das Problem ist, dass jede Bracket-Erweiterung, die ich versuche, nicht funktioniert. Liegt es daran, wie Tree Befehlszeilenargumente verarbeitet?

tree -I *. tree -I '*.' tree -I '{*.svg,*.png}' tree -I '{*.svg,*.png}' tree -I '*.(v,n}g' tree -I '*.' 

Specs:

  • GNU bash, Version 4.4.23
  • Baum v1.7.0
2
@Attie hat dies für mich in https://superuser.com/a/1354169/939457 gelöst. Die Antwort lautet `tree -I '* .svg | * .png`` Vielen Dank! Hagbard Celine vor 6 Jahren 0

1 Antwort auf die Frage

4
Attie

-Iist das Gegenteil von -P... das Handbuch gibt weitere Informationen darüber, was für Letzteres akzeptabel ist:

https://linux.die.net/man/1/tree

-P pattern 

Listet nur die Dateien auf, die dem Platzhaltermuster entsprechen.

Hinweis: Sie müssen die -aOption verwenden, um auch die Dateien zu berücksichtigen, die mit einem Punkt .zum Abgleich beginnen.

Gültige Platzhalteroperatoren sind *(beliebig null oder mehr Zeichen), ?(beliebiges einzelnes Zeichen), [...](ein beliebiges einzelnes Zeichen in Klammern (optional -(Bindestrich) für den Zeichenbereich): ex:) [A-Z]und [^...](jedes einzelne Zeichen, das nicht in Klammern aufgeführt ist) ) und |trennt alternative Muster.

Es wird keine Erwähnung der Klammer-Erweiterungssyntax der Shell von ... erwähnt. Diese Erweiterung wird von treenicht behandelt bash.

Und leider kannst du nicht -Imehrfach angeben ...

Stattdessen müssen Sie die vollständigen Muster mit einem Pipe ( |) auflisten, um sie voneinander zu trennen:

tree -I '*.svg|*.png' 

Beachten Sie die Verwendung von einfachen Anführungszeichen, um zu verhindern, dass die Shell das Sternchen ( *) oder die Variablen (durch einen Dollar eingeführt $) erweitert.


Beachten Sie auch, dass es nicht möglich ist, die Ausdehnung der Schale zu erzwingen, wie unten gezeigt:

$ tree -I '*.' + tree -I '*.svg' '*.png' *.png [error opening dir]