私があるディレクトリからコマンドを実行すると、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
次の式を#
使用できます。sed
フレディの答え)。 uniq
その後、重複行を削除できます。
tree | sed 's/\.[0-9]\+\.jpg/.####.jpg/g' | uniq
(最後の行はツリー描画部分で異なるシンボルを使用するため)画像の2つの項目がまだ残りますが、リストはまだ管理可能な長さに切り捨てられます。
.
|-- directory1
| `-- image_sequence
| |-- image.####.jpg
| `-- image.####.jpg
`-- directory2
|-- someanotherfile.ext2
`-- somefile.ext