如何缩短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
  • 第二行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

这仍然会为图像留下两个条目(因为最后一行在树绘制部分使用不同的符号),但它仍然将列表修剪到可管理的长度:

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

相关内容