
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