我所在的目录中运行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