Wie kann ich die Ausgabe einer Bildsequenz im Tree-Befehl kürzen?

Wie kann ich die Ausgabe einer Bildsequenz im Tree-Befehl kürzen?

Ich befinde mich in einem Verzeichnis, in dem die Ausführung treeeines Befehls etwa Folgendes erzeugt:

├── directory1
│   └── image_sequence
│       ├── image.0001.jpg
│       ├── image.0002.jpg
│       ├── image.0003.jpg
│       ├── image.0004.jpg
│       ├── image.0005.jpg
│       └── image.0006.jpg
│ 
└── directory2
    ├── somefile.ext
    └── someanotherfile.ext2

Die darin enthaltene Bildsequenz image_sequenceerzeugt eine große Liste, die ich kürzen möchte. Meine gewünschte Ausgabe sieht ungefähr wie folgt aus:

├── directory1
│   └── image_sequence
│       └── image.####.jpg
│ 
└── directory2
    ├── somefile.ext
    └── someanotherfile.ext2

Kann die Ausgabe des treeBefehls irgendwie geändert werden?

Antwort1

Versuche dies:

tree | sed '/\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 image\.[0-9]\+\.jpg/d; s/\(\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 image\.\)[0-9]\+\(\.jpg\)/\1####\2/'
  • Die erste /.../d;löscht alle Zeilen, die ├── image.[0-9]+.jpg(Pseudomuster-)Einträge enthalten
  • Die zweite s/.../\1####\2/ersetzt die letzte Zeile└── image.[0-9]+.jpg

Ausgabe:

$ tree | sed  '/\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 image\.[0-9]\+\.jpg/d; s/\(\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ima
ge\.\)[0-9]\+\(\.jpg\)/\1####\2/'
.
├── directory1
│   └── image_sequence
│       └── image.####.jpg
└── directory2
    ├── someanotherfile.ext
    └── somefile.ext

3 directories, 8 files

Dies funktioniert natürlich nur, wenn alle Dateien in image_sequencedem Bildmuster entsprechen und Dateinamen in anderen Verzeichnissen entsprechend den Mustern geändert werden. Wenn die letzte Datei in image_sequencebeispielsweise ist readme.txt, werden stattdessen alle Bildeinträge entfernt.

Antwort2

Sie können die numerischen Teile der sequentiellen Dateinamen durch #s ersetzen, indem Sie einen sedAusdruck verwenden (ähnlich dem zweiten inFreddys Antwort). uniqkönnen Sie dann die doppelten Zeilen entfernen:

tree | sed 's/\.[0-9]\+\.jpg/.####.jpg/g' | uniq

Dadurch bleiben zwar immer noch zwei Einträge für die Bilder übrig (weil in der letzten Zeile im Teil zum Zeichnen des Baums ein anderes Symbol verwendet wird), die Liste wird jedoch trotzdem auf eine handhabbare Länge gekürzt:

.
|-- directory1
|   `-- image_sequence
|       |-- image.####.jpg
|       `-- image.####.jpg
`-- directory2
    |-- someanotherfile.ext2
    `-- somefile.ext

verwandte Informationen