tree コマンドで画像シーケンスの出力を短縮するにはどうすればよいですか?

tree コマンドで画像シーケンスの出力を短縮するにはどうすればよいですか?

treeコマンドを実行すると次のような結果が生成されるディレクトリにいます。

├── 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

内部の画像シーケンスは、image_sequenceトリミングしたい大きなリストを生成します。私が望む出力は以下のようなものです:

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

コマンドの出力をtree何らかの方法で変更することはできますか?

答え1

これを試して:

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/'
  • 最初は(疑似パターン)エントリ/.../d;を含むすべての行を削除します├── image.[0-9]+.jpg
  • 2行目はs/.../\1####\2/最後の行を置き換えます└── image.[0-9]+.jpg

出力:

$ 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

image_sequenceもちろん、これは 内のすべてのファイルがイメージ パターンに一致する場合にのみ機能し、パターンに一致する他のディレクトリ内のファイル名を変更します。image_sequenceたとえば の最後のファイルが の場合readme.txt、代わりにすべてのイメージ エントリが削除されます。

答え2

連続したファイル名の数字部分を#sに置き換えるには、sed式(2番目の式に似ている)を使用します。フレディの答え) uniqでは、重複行を削除できます。

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

これにより、画像用のエントリが 2 つ残ります (最後の行ではツリー描画部分で異なるシンボルが使用されるため)。ただし、リストは管理可能な長さにまで削減されています。

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

関連情報