
我所在的目錄中執行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