
Ich befinde mich in einem Verzeichnis, in dem die Ausführung tree
eines 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_sequence
erzeugt 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 tree
Befehls 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_sequence
dem Bildmuster entsprechen und Dateinamen in anderen Verzeichnissen entsprechend den Mustern geändert werden. Wenn die letzte Datei in image_sequence
beispielsweise 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 sed
Ausdruck verwenden (ähnlich dem zweiten inFreddys Antwort). uniq
kö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